だいぶ昔、Emacsを導入した頃の奮闘記です。かなり初心者視点ですが、大事なことだったでメモ。
初めてWindowsにEmacsを導入したとき、ファイルを開くたびに新しいEmacsが起動してるのを見て、バッファで開きたいんだけど???? となり。
それからすぐにemacsclientw.exe
の存在を知ったので、早速使おうとしたら、
・Emacs Serverが起動していないとエラーになる。
・ファイルの引数がないとエラーになる。
というちょっとりかいできない挙動を示し、
このままではメモ帳のような自然な動きのショートカットを作れない!となり、何とかしようと奮闘してみました。
しばらくぐぐって見つけたのがこの記事、
[emacs.exe と emacsclient.exe を自動的に使い分ける AutoHotkey のスクリプトを作成した (gnupack 向け)]
というまさにどんぴしゃな解決法を見つけたのでした。
が、残念なことにどうにもうまく動かなかった……ので、
同じくAHKを使って自分で作ってみました。
こういう事例にはAHKを使えばいいんだね!すごい!おぼえた!
というわけでコードはこちら。
[gist] https://gist.github.com/4705394
ほとんど1から書いてますが、やりたいことは上の記事のものと同じです。
・起動してなかったら起動する
・起動してて引数があったらクライアントをつかう
・起動してて引数がなかったらEmacsをアクティブ化
を行なってます。
参考元と違うのは、
- 引数を1つしか受け入れない挙動を変えた(複数ファイルをドロップすると全部読みこんでくれる)
- Emacsが起動しない問題を解決(Emacsが未起動の状態では存在しないはずのserverファイルに対してFileExistやってた)
- ファイルパスにスペースが入ってると正常に動かない問題を解決(※自分の環境では致命的)
みっちりコメントが書いてあるのは、AHKスクリプトが初めてで記法がまるでわかめだったのでコードを覚えるのを諦めた結果です。もうかきたくない。えりすぷ最高。
AHK的な書き方っていうのをガン無視してる感あるけど気にしない方向で。
これをコンパイルしてショートカットや関連付けに使うことで、ふつうのWindowsアプリケーションのように地味インタラクティブな挙動でEmacsを起動することができます。やったね!
……そもそもEmacsを終了させないっていう意見もあるらしい。
動作させるには、
[AutoHotKey_L] http://l.autohotkey.net/ から、
[Compiler - Ahk2Exe] が必要です。
64bitなコンパイルもできるよ。うれしい。
使う前にiniファイルを用意して各ファイルのパスを書きます。
[path]
emacs=
emacsclientw=
server=
gnupackを使ってるときは、emacs
にはgnupackインストールディレクトリにあるemacs.exeを指定すること。
不要だと思ったのでiniのパスチェック処理は除外してエラーハンドラに任せてます。
パス間違いには注意。
以上です。
Windowsに慣れてたらこの挙動に結構戸惑ったけれど、Linux寄りの人だとそうでもないのかな?
WindowsでEmacsデビューの敷居が少しでも低くなってくれればいいなとおもいました。