技術memo

関数型ゴースト

WindowsでEmacsにテキストファイルを関連付けする

Windows 7でemacsclientを導入しようとして困った話です。

やりたいこと

結論

  • gnupack版EmacsWindowsのパス周りでまず死ぬ模様です。
  • IMEパッチ未適用も日常利用では辛いです。
  • ということでNTEmacsのパッチ適用版ビルドを手に入れます。
  • 設定関連は~/.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に指定します。
  • 運用上面倒なので、EmacsWindowsのスタートアップに設定します(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)を参考に設定に追加しました。

ということで以上です。