11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Windows]gnupackのemacsclientw.exeを快適に使えるようにする。

Posted at

だいぶ昔、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ファイルを用意して各ファイルのパスを書きます。

StartEmacs.ini
[path]
emacs=
emacsclientw=
server=

gnupackを使ってるときは、emacsにはgnupackインストールディレクトリにあるemacs.exeを指定すること。
不要だと思ったのでiniのパスチェック処理は除外してエラーハンドラに任せてます。
パス間違いには注意。

以上です。
Windowsに慣れてたらこの挙動に結構戸惑ったけれど、Linux寄りの人だとそうでもないのかな?
WindowsでEmacsデビューの敷居が少しでも低くなってくれればいいなとおもいました。

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?