さて、XEmacs 21.[45]からGNU Emacs 21.3.50 w/ multi-tty supportに乗り換えた、というかそちらをメインで使うようにしたのだが、いくつか問題もある。
- Emacs serverのソケットファイル上書き問題
Emacs serverを使うには、起動時にserver-startを呼び、エディタ呼び出しスクリプトには「exec emacsclient -a emacs “$@”」と書いておけばいい。
ただし、server-startはすでに存在するソケットは破棄して自分が乗っ取ってしまうので、うっかり別のEmacsを起動するとUNIXドメインソケットファイルが置き換えられてしまい、それまでのEmacsセッションに外からアクセスできなくなってしまうのでまずい。
そこで、すでにソケットファイルがあったらserver-startを呼ばないようにすればよさそうだが、それには、サーバソケットを握っているEmacsインスタンスが終了時に確実にソケットを消すことが前提となる。まとめると、次のコードでうまくいった。
123456789101112131415(let ((server-socket-dir (or server-socket-dir(format "/tmp/emacs%d" (user-uid)))))(or (file-exists-p (expand-file-name server-name server-socket-dir))(progn(server-start)(add-hook'kill-emacs-hook'(lambda ()(let ((server-socket-dir (or server-socket-dir(format "/tmp/emacs%d" (user-uid)))))(if server-process(condition-case () (delete-process server-process) (error nil)))(condition-case ()(delete-file (expand-file-name server-name server-socket-dir))(error nil))))))))解説すると、ソケットファイルがないときだけサーバを上げるとともに、Emacsの終了時フックとして「自分がサーバソケットを握っていたらソケットファイルを消す」処理を掛けている。
- Xのセレクションの文字コード問題
これは未解決。GNU Emacs 21.3.50のバグの可能性が高い。
set-selection-coding-system (= set-clipboard-coding-system)でeuc-japanを指定しても、他のXクライアントからの日本語文字列のペーストがうまくいかない。Mozillaから貼ると生JISのようなコードに化け、ktermから貼るとJISの制御コードのゴミが入る。これは不便なのでなんとかしたい。
- フォントの問題
これも要調査。Unicode用のフォントと、lookupの外字(ビットマップ)の表示がおかしい。Emacs 21.3までとは何かが違うようだ。