Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs 如何删除终止EmacClient缓冲区的提示?_Emacs_Emacsclient - Fatal编程技术网

Emacs 如何删除终止EmacClient缓冲区的提示?

Emacs 如何删除终止EmacClient缓冲区的提示?,emacs,emacsclient,Emacs,Emacsclient,在我用EmacClient打开某个东西之后,当我杀死该缓冲区(C-x k)时,我会得到一个确认对话框: Buffer `blah' still has clients; kill it? (yes or no) 但当我杀死直接从Emacs打开的缓冲区时,我不会。当EmacClient打开它们时,有没有办法不获取它们?这对我很有用: (remove-hook 'kill-buffer-query-functions 'server-kill-buffer-query-function) 有关的

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

Buffer `blah' still has clients; kill it? (yes or no)
但当我杀死直接从Emacs打开的缓冲区时,我不会。当EmacClient打开它们时,有没有办法不获取它们?

这对我很有用:

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

有关的详细信息。

另一个选项是将
-n
选项与
emacsclient
一起使用,这样它就不会等待文件被编辑后才退出

例如:

emacsclient -n myfile.txt

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

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

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

我无耻地从Emacs Wiki中的条目中窃取了以下代码片段:

(添加hook'服务器交换机hook
(lambda()
(当(当前本地地图)
(使用本地映射(复制键映射(当前本地映射)))
(当服务器缓冲区客户端
(本地设置键(kbd“C-x k”)“服务器编辑”))
虽然这对其他终止缓冲区的方法(如
M-x列表缓冲区
)没有帮助,但考虑到一些shell脚本所期望的Emacs客户端行为,这应该是安全的

下面是Emacs发行版中文件server.el的一段摘录,它可能会让我们了解我的意思:

;;编辑完服务器缓冲区后,再次调用服务器编辑
;; 为客户端将该缓冲区标记为已完成并切换到下一个缓冲区
;; 服务器缓冲区。当客户端的所有缓冲区都已编辑时
;; 并退出服务器编辑,客户端“编辑器”将返回
;; 调用它的程序。
稍后,会有一个明确的警告:缓冲区不应该被杀死,而应该被释放(至少我是这样解释的):

;;在终止服务器缓冲区之前询问。
;; 有人建议释放它的客户端,
;; 但我认为这很危险——客户会继续
;; 使用该文件中磁盘上的任何内容。-rms。

我不知道我是否应该对这个答案进行投票,但就我所知,它是正确的,因此:-)如果emacs开始使用EmacClient的“备用编辑器”行为,这将不起作用。。。在这种情况下,您可以执行(defun server remove kill buffer hook()(remove hook‘kill buffer query functions’server kill buffer query function))(添加hook‘server visit hook’server remove kill buffer hook)我在移除挂钩时会稍微小心一点。从文件“server.el”:
在终止服务器缓冲区之前询问。有人建议释放它的客户端,但我认为这是危险的——客户端将继续使用该文件中磁盘上的任何内容rms。
谢谢!与其他解决方案相比,在EmacClient使用“-c”选项创建新帧的情况下,在缓冲区被终止时不关闭帧(对我来说)是有好处的。注意:-n(-no wait)不是您想要的,如果您有一个程序正在等待文件完成编辑。您应该能够使用
(加载“服务器”后评估)(删除挂钩…)
为了处理加载顺序问题(虽然如果服务器库尚未加载,那么一旦加载别名,它就会被删除,因此在加载之后,可能有其他东西正在干扰钩子)?@phils如果我通过EmacClient-t(导出备用编辑器=)启动emacs,它似乎没有用。嗯,是真的。我看到(当然是在24.5中)该函数仅在
服务器启动期间添加,因此在库加载后不能立即删除。看起来您可以在
服务器启动
上使用after advice,或者使用
服务器访问挂钩
(在这种情况下,代码可能会重复运行,但在这种情况下这不是问题)。请注意,当您使用EmacClient编辑文件时,Emacs告诉您使用
C-x#
在完成文件处理后通知服务器。如果你这样做(而不是
C-xk
),你就不会被问到这个问题。