后,我打开与emacsclient的东西,当我杀死缓冲区(C-X K)我得到一个确认对话框:如何删除提示以杀死emacsclient缓冲区?
Buffer `blah' still has clients; kill it? (yes or no)
但是,当我杀了缓冲区直接打开从Emacs的我不知道。当emacsclient打开它们时,有没有办法让它们得到它们?
后,我打开与emacsclient的东西,当我杀死缓冲区(C-X K)我得到一个确认对话框:如何删除提示以杀死emacsclient缓冲区?
Buffer `blah' still has clients; kill it? (yes or no)
但是,当我杀了缓冲区直接打开从Emacs的我不知道。当emacsclient打开它们时,有没有办法让它们得到它们?
这为我工作:
(remove-hook 'kill-buffer-query-functions 'server-kill-buffer-query-function)
有一个关于Using Emacsclient blog entry的更多信息。
我不知道这是否适合我upvote这个答案,但据我所知,这是正确的,所以:-) – ShreevatsaR 2008-11-06 16:31:08
这不会工作,如果emacs开始使用emacsclient的“ALTERNATE_EDITOR”行为...在你可以做 (defun server-remove-kill-buffer-hook() (remove-hook'kill-buffer-query-functions'server-kill-buffer-query-function)) (add-hook' server-visit-hook'server-remove-kill-buffer-hook) – 2013-01-30 15:00:14
该代码片段中的`*`是什么。 – Tshepang 2013-05-26 08:55:18
另一种选择是使用-n
选项与emacsclient
,以便在退出之前不等待文件被编辑。
例如:
emacsclient -n myfile.txt
无论出于何种原因,我必须手动启动上emacs23的移除钩溶液,也许是因为服务器的某些部分被加载在加载的.emacs后。在(remove-hook ...)之前添加虚拟(服务器启动)行到我的.emacs没有帮助。所以我选择了下面,少原则性的解决方案:
(defalias 'server-kill-buffer-query-function '(lambda() t))
你可以设置键盘命令C-值X k,这样它标志着客户端缓冲区为已完成,并杀死正常缓冲区。
我无耻地窃取了此代码段从Emacs的维基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.
后来,有一个明确的警告,一个缓冲不该“T被杀死,但释放(至少这是我如何理解它):
;; 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.
注意,当您使用emacsclient编辑文件时,Emacs会告诉你用`CX#`你什么时候告诉服务器已完成该文件。如果你这样做(而不是`C-x k`),你不会被问到这个问题。 – phils 2014-06-19 22:18:59