emacsclient で何かを開いた後、そのバッファーを kill (Cx k) すると、確認ダイアログが表示されます:
Buffer `blah' still has clients; kill it? (yes or no)
しかし、Emacs から直接開かれたバッファーを kill するときは、そうしません。emacsclientがそれらを開いたときにそれらを取得しない方法はありますか?
emacsclient で何かを開いた後、そのバッファーを kill (Cx k) すると、確認ダイアログが表示されます:
Buffer `blah' still has clients; kill it? (yes or no)
しかし、Emacs から直接開かれたバッファーを kill するときは、そうしません。emacsclientがそれらを開いたときにそれらを取得しない方法はありますか?
他のオプションは、終了する前にファイルが編集されるのを待たないように-n
オプションを使用することです。emacsclient
例えば:
emacsclient -n myfile.txt
これは私のために働いた:
(remove-hook 'kill-buffer-query-functions 'server-kill-buffer-query-function)
Using Emacsclient blog entryに関する詳細情報があります。
キーボード コマンドCx kを設定して、クライアント バッファを完了としてマークし、通常のバッファを削除することができます。
Emacs WikiのEmacs クライアントエントリからこのコード スニペットを恥知らずに盗み出しました。
(add-hook 'server-switch-hook
(lambda ()
(when (current-local-map)
(use-local-map (copy-keymap (current-local-map))))
(when server-buffer-clients
(local-set-key (kbd "C-x k") 'server-edit))))
これはバッファを強制終了する他の方法 ( などM-x list-buffers
) には役立ちませんが、一部のシェル スクリプトが期待する Emacs クライアントの動作を尊重することで、安全を確保する必要があります。
Emacs ディストリビューションのファイルserver.elからの抜粋を次に示します。
;; When you finish editing a Server buffer, again call server-edit
;; to mark that buffer as done for the client and switch to the next
;; Server buffer. When all the buffers for a client have been edited
;; and exited with server-edit, the client "editor" will return
;; to the program that invoked it.
後で、バッファーを強制終了するのではなく、解放する必要があるという明示的な警告があります (少なくともこれは私が解釈する方法です)。
;; Ask before killing a server buffer.
;; It was suggested to release its client instead,
;; but I think that is dangerous--the client would proceed
;; using whatever is on disk in that file. -- rms.
何らかの理由で、emacs23 で remove-hook ソリューションを手動で起動する必要があります。おそらく、.emacs が読み込まれた後にサーバーの特定の部分が読み込まれるためです。(remove-hook ...) の前にダミーの (server-start) 行を .emacs に追加しても役に立ちませんでした。したがって、私は次のような原則的ではない解決策を選択しました。
(defalias 'server-kill-buffer-query-function '(lambda () t))