如何关闭emacsclient的GUI窗口而不终止服务器

15
如何关闭emacsclient框架而不终止服务器/守护进程?
在GUI中使用“C-x C-c”或“C-x 5 0”将退出框架和服务器(以及其他客户端),但是当从终端执行此操作时,仅会退出当前框架。
(Ps:我的emacs版本为24.2,gtk。我尝试过不使用init-file来查看是否是来自我的配置,但结果相同)

长期以来,我一直遇到gtk构建emacs的问题,并切换到另一个工具包。Freenode上#emacs频道的人指出,这是gtk中某个长期存在的bug导致服务器崩溃。尝试使用lucid工具包进行构建。 - Randy Morris
6个回答

12

从minibuffer开始,当emacsclient启动时:

完成一个缓冲区后,键入C-x #。


4
对我来说肯定不是这样。 - Dolda2000
它在 emacsclient -t 下工作得非常完美,但在 emacsclient -c 下不行。(这是指终端和 GUI 的区别) 我将尝试使用 ppa:cassou/emacs 中的最新版本。 - AdrieanKhisbe
你确定你的服务器并不是意外崩溃了,而不是有意退出? - Dolda2000
你是通过启动常规的Emacs进程并在其中调用server-start,还是使用emacs --daemon来启动服务器? - Rörd
2
通过在常规进程中调用server-start。但是,如果我使用emacs --daemon启动服务器,它同样有效。编辑:实际上,即使使用C-x C-c退出客户端而不终止守护程序也可以正常工作。 - Dolda2000
显示剩余9条评论

6
我认为关键点在于需要以守护进程模式启动服务器。如果服务器在现有的emacs进程中运行——例如,如果您的init文件中有(server-start)——则该服务器会随着emacs进程一起关闭。
有几种方法可以以守护进程模式启动服务器:
  • 使用--daemon命令行选项调用emacs
  • 使用--alternate-editor=""命令行选项调用emacsclient,这实际上会为您运行emacs --daemon,然后尝试连接到它
一旦将服务器设置为守护进程模式,您就可以关闭任何框架,守护进程将继续等待进一步的连接。

4
使用-n/--no-wait标志启动emacsclient将会:

不等待服务器返回

这种情况下您不需要关闭客户端。

如果您必须关闭emacsclient,只需关闭缓冲区,服务器将保持完好无损。


2
因为您是在一个现有的框架中运行了(server-start),所以该框架不是emacsclient框架,关闭最后一个这样的框架显然会得到与C-x C-c相同的处理方式:它将退出Emacs。
如果您使用emacs --daemon,可能使用ALTERNATE_EDITOR =''技巧,您就不会遇到这个问题;您只需使用emacsclient -n -c打开GUI框架,关闭后,守护程序会继续等待您打开新的框架,无论是图形还是基于终端的。

我甚至通过systemd启动它,就像在WikEmacs上描述的那样:http://wikemacs.org/wiki/Emacs_server#Adding_To_OS_Startup - MKesper

1

我同时使用Debian和i3以及OSX。通常情况下,我会通过窗口管理器的关闭窗口快捷键退出emacsclient GUI框架。例如,在OSX中,我使用“Command + w”关闭客户端GUI框架而不终止服务器;在i3中,我使用“Super + Shift + q”(i3默认的关闭窗口快捷键)退出客户端框架。


0
在现代版本的GNU Emacs(27+)中,它说:

完成此框架后,请键入C-x 5 0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接