如何删除杀死emacsclient缓冲区的提示?

时间:2008-11-06 09:39:16

标签: emacs emacsclient

用emacsclient打开东西之后,当我杀死那个缓冲区(C-x k)时,我得到一个确认对话框:

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

但是当我杀死直接从Emacs打开的缓冲区时,我没有。有没有办法在emacsclient打开它们时不能获取它们?

4 个答案:

答案 0 :(得分:22)

另一个选项是将-n选项与emacsclient一起使用,以便它在退出之前不会等待编辑文件。

例如:

emacsclient -n myfile.txt

答案 1 :(得分:21)

这对我有用:

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

有关Using Emacsclient blog entry的更多信息。

答案 2 :(得分:1)

您可以设置键盘命令 C-x k ,以便将客户端缓冲区标记为已完成并杀死正常缓冲区

我无耻地从Emacs Wiki的Emacs Client条目中偷走了这段代码:

(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),但是通过尊重某些shell脚本期望的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.

答案 3 :(得分:0)

无论出于何种原因,我必须在emacs23上手动启动remove-hook解决方案,可能是因为加载.emacs后服务器的某些部分已加载。在(remove-hook ...)之前向我的.emacs添加一个虚拟(服务器启动)行没有帮助。所以我选择了以下的原则性解决方案:

(defalias 'server-kill-buffer-query-function '(lambda () t))