24

emacsclient で何かを開いた後、そのバッファーを kill (Cx k) すると、確認ダイアログが表示されます:

Buffer `blah' still has clients; kill it? (yes or no)

しかし、Emacs から直接開かれたバッファーを kill するときは、そうしません。emacsclientがそれらを開いたときにそれらを取得しない方法はありますか?

4

4 に答える 4

22

他のオプションは、終了する前にファイルが編集されるのを待たないように-nオプションを使用することです。emacsclient

例えば:

emacsclient -n myfile.txt
于 2008-11-06T14:26:20.630 に答える
21

これは私のために働いた:

(remove-hook 'kill-buffer-query-functions 'server-kill-buffer-query-function)

Using Emacsclient blog entryに関する詳細情報があります。

于 2008-11-06T10:19:14.870 に答える
1

キーボード コマンド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.
于 2015-01-17T18:14:45.337 に答える
0

何らかの理由で、emacs23 で remove-hook ソリューションを手動で起動する必要があります。おそらく、.emacs が読み込まれた後にサーバーの特定の部分が読み込まれるためです。(remove-hook ...) の前にダミーの (server-start) 行を .emacs に追加しても役に立ちませんでした。したがって、私は次のような原則的ではない解決策を選択しました。

(defalias 'server-kill-buffer-query-function '(lambda () t))
于 2013-05-28T00:47:16.080 に答える