如何在不杀死服务器/守护进程的情况下关闭 emacsclient 框架?
在 gui 中执行C-x C-c
或C-x 5 0
操作将退出框架和服务器(以及其他客户端),而这只是在从终端完成时退出当前框架。
(Ps:我的 emacs 版本是 24.2,gtk。我试过不使用 init-file 来查看它是否来自我的配置,但结果是一样的)
如何在不杀死服务器/守护进程的情况下关闭 emacsclient 框架?
在 gui 中执行C-x C-c
或C-x 5 0
操作将退出框架和服务器(以及其他客户端),而这只是在从终端完成时退出当前框架。
(Ps:我的 emacs 版本是 24.2,gtk。我试过不使用 init-file 来查看它是否来自我的配置,但结果是一样的)
从 minibufferemacsclient
开始时:
完成缓冲区后,键入 Cx #
我认为这里的关键是您需要以守护程序模式启动服务器。如果服务器在现有的 emacs 进程中运行 - 例如,如果您(server-start)
的 init 文件中有 - 服务器会因 emacs 进程而死。
有两种方法可以在守护程序模式下启动服务器:
emacs
使用--daemon
命令行选项调用emacsclient
使用命令行选项调用,该--alternate-editor=""
选项实际上emacs --daemon
将为您运行,然后尝试连接到它一旦服务器处于守护程序模式,您应该能够关闭任何帧,并且守护程序将继续等待进一步的连接。
以/标志开头将emacsclient
:-n
--no-wait
不要等待服务器返回
在这种情况下,您不需要关闭客户端。
如果您必须关闭emacsclient
,只需终止缓冲区,服务器将保持不变。
因为您(server-start)
从现有框架运行,所以该框架不是 emacsclient 框架,并且关闭最后一个这样的框架显然会得到与 相同的处理C-x C-c
:它将退出 Emacs。
如果你使用emacs --daemon
了,可能使用了这个ALTERNATE_EDITOR=''
技巧,你就不会遇到这个问题;您可以只使用emacsclient -n -c
打开一个 GUI 框架,在关闭它之后,守护程序会坐等您打开一个新框架,无论是图形还是基于终端。
我同时使用 Debian 和 i3 和 OSX。我通常通过窗口管理器的关闭窗口快捷方式退出 emacsclient GUI 框架。例如,在 OSX 中,我使用“Command + w”关闭客户端 GUI 框架而不杀死服务器,而在 i3 中,我使用“Super + Shift + q”(i3 默认关闭窗口)退出客户端框架.
在现代版本的 GNU Emacs(27+) 中,它说
完成此帧后,键入 Cx 5 0