なでしこを使ってWindowsのテキストエディタで一時的なメモファイルを快適に作成する

Motivation
----------------------------

Emacs の open-junk-file と同じノリです。

作業ログは随時逐一事細かにファイルに記録しておきたいものです。

だいたいその日ごとにいろんなトピックのタスクが発生するのですが、
毎回その日のファイルを作って、どこに保存するか決めて、ファイル名決めて・・・っていうのはだるいですよね。

手軽にメモを作成したい！
そこを解決するライフハックです。
ランタイムとして [なでしこ](https://nadesi.com/top/index.php?%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89) 1系が必要です。

Goal
--------------

1. Ctrl+Alt+J を押してファイル名の残りを入力すれば自動的に `yyyy/MM/dd/yyyyMMdd-HHmmss-` というファイルが作成され、エディタが起動するという代物です。
1. Dropbox, GoogleDrive, ownCloud 等のクラウドストレージと連携していれば保存した瞬間同期されて、どこでもそのメモを参照できるのでとても便利です。

How to
-----------

- 以下のスクリプトをどこか好きな場所に置きます。

`junk_base_dir`, `emeditor="C:\Users\Programs Files\EmEditor\EmEditor.exe"` はそれぞれ保存ベースとなるディレクトリのパス、エディタの実行ファイルのフルパスで置き換えて下さい。

```なでしこ:junkfile.nako
母艦の可視はオフ
junk_base_dir=「C:\Users\fred\ownCloud\Documents\memos」
today=今日
now=今
todayの「/」を「\」に置換
junk_dir="{junk_base_dir}\{それ}"
today_hyphen=todayの「/」を「-」に置換
now_hms=nowの「:」を「」に置換
filename_prefix="{today_hyphen}-{now_hms}-"
filename_prefixを表示
ダイアログ初期値はfilename_prefix
「Input Junk File Name」で尋ねる
もしそれがいいえならば
	おわり
違えば
	junk_file_nameはそれ
	junk_dirのフォルダ作成
	junkfile="{junk_dir}\{junk_file_name}"
	「」をjunkfileに保存
	emeditor="C:\Users\Programs Files\EmEditor\EmEditor.exe"
	"{emeditor} {junkfile}"をコマンド実行
	おわり
```

- 保存した場所の例

![2017-12-14_13h06_58.png](https://qiita-image-store.s3.amazonaws.com/0/8511/97843ce1-c71a-d98e-58d7-d2e9b8207434.png)

- デスクトップ等適当な場所にショートカットを作成します

![2017-12-14_13h07_19.png](https://qiita-image-store.s3.amazonaws.com/0/8511/d4867e36-4cf9-bf49-41bc-44c67dd4d341.png)

- ショートカットキーを割り当てます

![2017-12-14_12h27_32.png](https://qiita-image-store.s3.amazonaws.com/0/8511/37b80a74-da03-a6df-437c-fc76da5f5b02.png)

Usage
---------------

- `Ctrl+Alt+J` をタイプするとファイル名を聞いてきます。

![2017-12-14_12h27_50.png](https://qiita-image-store.s3.amazonaws.com/0/8511/89d2a3b7-3e92-8022-b927-6bf5c3b15698.png)

- 残りのファイル名を埋めて拡張子を書きましょう。

![2017-12-14_12h27_57.png](https://qiita-image-store.s3.amazonaws.com/0/8511/a2d3a7c2-23c3-55b4-5998-7b6eff083c10.png)

- ッターンとやると年月日のディレクトリの下にファイルが作成され、エディタが起動してすぐ編集できる状態になります。

![2017-12-14_12h29_32.png](https://qiita-image-store.s3.amazonaws.com/0/8511/982b5179-ca06-d47b-6638-a286280edcb5.png)

快適。

英語版の Windows だとなでしこ1は非ユニコードアプリケーションなので、これ使えないので↓を使うことにする。

入門したてなのでくっそ汚いプログラムになっています。

[Open junkfile golang windows version.](https://gist.github.com/wnoguchi/b594f239f173f57c43a083936b905ae7)

```go:junkfile.go
package main

import (
  "fmt"
  "time"
  "bufio"
  "io/ioutil"
  "os"
  "os/exec"
  "strings"
)

func main() {
    //fmt.Println("hello, world")
    nowTime := time.Now()
    const yyyymmdd = "2006/01/02"
    const ymdhis = "20060102-150405"
    str1 := nowTime.Format(yyyymmdd)
    str2 := nowTime.Format(ymdhis)
    fmt.Printf("now -> %s\n", str1)
    fmt.Printf("now -> %s\n", str2)
    reader := bufio.NewReader(os.Stdin)
    
    fmt.Print(str2, "-")
    
    text, _ := reader.ReadString('\n')
    text = strings.TrimSuffix(text, "\r\n")
    //text = text[:len(text)-2]
    fmt.Println(text)
    
    folderPath := "D:/Users/wnoguchi/Dropbox/Documents/junk/" + str1
    os.MkdirAll(folderPath, os.ModePerm)
    
    filePath := folderPath + "/" + str2 + "-" + text
    fmt.Println(filePath)
    d1 := []byte("")
    //err := ioutil.WriteFile(filePath, d1, os.ModePerm)
    ioutil.WriteFile(filePath, d1, os.ModePerm)
    
    //if err := os.MkdirAll("hoge/fuga", 0777); err != nil {
    //    fmt.Println(err)
    //}
    
    //C:\Program Files\EmEditor\EmEditor.exe
    //cmd:= exec.Command("cmd","/C","start","C:/Program Files/EmEditor/EmEditor.exe", filePath)
    cmd:= exec.Command("C:/Program Files/EmEditor/EmEditor.exe", filePath)
    //err:=cmd.Start()
    cmd.Start()
    //panic(err)
}
```

なでしこ愛
----------------------

なでしこは日本語プログラミング言語です。

最近 JavaScript で動く [なでしこ3](https://nadesi.com/dev/wiki/index.php?%E3%81%AA%E3%81%A7%E3%81%97%E3%81%933) がでました。
トランスパイルとかしてるのだろうか。Web に特化してるのかな？
また、[なでしこ2](https://nadesi.com/dev/wiki/index.php?%E3%81%AA%E3%81%A7%E3%81%97%E3%81%932%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA) は C# で開発されているので .NET のランタイムが動作する環境であればどこでも動きます。そう、 Mono ならね。
上記は現行のなでしこ 1 系のおはなしです。

References
---------------------

1. [Emacs で使い捨てファイルを開く - Qiita](https://qiita.com/yynozk/items/1d143b0b69e9aaf252ca)
1. [なでしこ:日本語プログラミング言語](https://nadesi.com/top/)