emacsclient の雑多な設定

elscreen と emacsclient をいっしょに使っている状態で、ちょっと内容だけ確認してその後すぐに移動させたいファイルがあるときに、そのファイルのスクリーンで C-z k すると、スクリーンは消えるけどバッファは残っているので、ファイルを移動しようとすると Windows に怒られる。
このとき、閉じ忘れたバッファを閉じにいくのが面倒なのでなんとかしたいと思った。


elscreen のソースを覗いてみたら、elscreen-kill-screen-and-buffers とかそのものずばりな機能があることを見つける。
デフォルトのバインドは C-z M-k。
あーね。これを使えばいいわけね。
でも M-k っていうのがちょっと面倒だ。
オートセーブしてるからあんまり困ることなさそうだし、スクリーン消すときはバッファも一緒に消えるのをデフォルトにしちゃおう。
ってなわけで、elscreen-kill の代わりに elscreen-kill-screen-and-buffers を使うことにする。

;; キーバインドの変更
(define-key elscreen-map "\C-k" 'elscreen-kill-screen-and-buffers)
(define-key elscreen-map "k" 'elscreen-kill-screen-and-buffers)

うむ。これで前述の面倒な問題は解決した。


でも emacsclient で開いたファイルをキルしようとすると警告が出てくるのがちょっと嫌だ。
C-x # してないから言われるんだろうなぁ。
じゃあってことで少しさっきのスクリプトを書き直してみる。

;; キーバインドの変更
(define-key elscreen-map "\C-k" 'my-kill-screen-and-buffers)
(define-key elscreen-map "k" 'my-kill-screen-and-buffers)
(defun my-kill-screen-and-buffers ()
  (interactive)
  (server-edit)
  (elscreen-kill-screen-and-buffers)
  (message ""))

elscreen-kill-screen-and-buffers の前に C-x # (server-edit) を呼び出すようにしてみた。
これで警告が出なくなった。


ほんとは emacsclient 経由で開いてるファイルを閉じるときだけ C-x # すべきなんだろうけど、場合分けのやり方がよく分からない。
場合分けをしてないから、普通に Meadow から開いたファイルを閉じるときに「No server editing buffers exist」ってメッセージが出る。
でも上述のスクリプトでは、最後に空のメッセージを送ることで見かけ上は何事もなかったかのように振る舞うようにしてある。
まあこれで十分か。
あ。emacsclient でファイル開いたときに M-x list-processes すると status が listen な server プロセスが出てくるから、場合分けにはたぶんこれを利用するんだろうなぁ。


あと emacsclient をコンテキストメニューの「送る」から指定できるようにしておいた。
これは、C:\Documents and Settings\[ユーザ]\SendTo に gnuclientw.exe のショートカットをおけば OK。