WindowsでEmacsにテキストファイルを関連付けする
Windows 7でemacsclientを導入しようとして困った話です。
やりたいこと
結論
- gnupack版EmacsはWindowsのパス周りでまず死ぬ模様です。
- IMEパッチ未適用も日常利用では辛いです。
- ということでNTEmacsのパッチ適用版ビルドを手に入れます。
- 以下のどちらかを適宜ダウンロード(何となく最新版がほしいので前者
emacs-24.4-IME-patched-generic-cpu.zip
を利用します)。 - chuntaro/NTEmacs64 · GitHub
- NTEmacs / Emacs for Windows
- 以下のどちらかを適宜ダウンロード(何となく最新版がほしいので前者
- 設定関連は
~/.emacs.d/init.el
に以下を記述します。
;; emacsclient (require 'server) (when (and (>= emacs-major-version 23) (equal window-system 'w32)) (defun server-ensure-safe-dir (dir) "Noop" t)) ; Suppress error "directory ~/.emacs.d/server is unsafe" on windows. (unless (server-running-p) (server-start)) (remove-hook 'kill-buffer-query-functions 'server-kill-buffer-query-function)
- Windowsの.txtや.mdやその他諸々のファイル類を開くアプリケーションを、Emacsのbinフォルダにあるemacsclientw.exeに指定します。
- 運用上面倒なので、EmacsをWindowsのスタートアップに設定します(runemacs.exeへのショートカットをスタートメニューのスタートアップフォルダに追加)。
結論までの紆余曲折
- gnupack版Emacs(gnupack_devel-12.00-2014.12.29)ではがんばっても無理そうです。
- emacsclientw.exeは無く、emacsclient.exeがありました。
- emacsclientから渡されるパスは
C:\foo\bar.txt
形式ですが、これに含まれるEmacsでは/C/foo/bar.txt
形式でないとファイルが開けません。 - そもそも
C-x C-f
で開こうとしても前者の形式では駄目みたいです。
- serverファイルはデフォルトで
~/.emacs.d/server/server
の模様です。/tmp/emacsXXX/server
となっていたのは、gnupack版だからでしょうか。詳細確認していません。
The directory ~/.emacs.d/server is unsafe
とエラーが出るのはこちら(windows - Emacs - Error when calling (server-start) - Stack Overflow)を確認、設定に追加しました。- serverフォルダの権限をどう弄っても駄目でした。
- 無事emacsclientからファイルを開けるようになったものの、bufferをkillする際に確認が出てくるのが鬱陶しいので、こちら(hiChangeLog / 2007-04)を参考に設定に追加しました。
ということで以上です。