2008-11-06 62 views
24

后,我打开与emacsclient的东西,当我杀死缓冲区(C-X K)我得到一个确认对话框:如何删除提示以杀死emacsclient缓冲区?

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

但是,当我杀了缓冲区直接打开从Emacs的我不知道。当emacsclient打开它们时,有没有办法让它们得到它们?

+0

注意,当您使用emacsclient编辑文件时,Emacs会告诉你用`CX#`你什么时候告诉服务器已完成该文件。如果你这样做(而不是`C-x k`),你不会被问到这个问题。 – phils 2014-06-19 22:18:59

回答

20

这为我工作:

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

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

+0

我不知道这是否适合我upvote这个答案,但据我所知,这是正确的,所以:-) – ShreevatsaR 2008-11-06 16:31:08

+4

这不会工作,如果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

+5

该代码片段中的`*`是什么。 – Tshepang 2013-05-26 08:55:18

22

另一种选择是使用-n选项与emacsclient,以便在退出之前不等待文件被编辑。

例如:

emacsclient -n myfile.txt 
0

无论出于何种原因,我必须手动启动上emacs23的移除钩溶液,也许是因为服务器的某些部分被加载在加载的.emacs后。在(remove-hook ...)之前添加虚拟(服务器启动)行到我的.emacs没有帮助。所以我选择了下面,少原则性的解决方案:

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

你可以设置键盘命令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.