用emacsclient打开东西之后,当我杀死那个缓冲区(C-x k)时,我得到一个确认对话框:
Buffer `blah' still has clients; kill it? (yes or no)
但是当我杀死直接从Emacs打开的缓冲区时,我没有。有没有办法在emacsclient打开它们时不能获取它们?
答案 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))