Eclipse Emacs C-x C-C重写保存缓冲区终止终端(如果在最后打开的帧内)

Eclipse Emacs C-x C-C重写保存缓冲区终止终端(如果在最后打开的帧内),eclipse,emacs,daemon,Eclipse,Emacs,Daemon,我已经设置了emacs-daemon在登录到Gnome时运行,并将EmacClient与我在Eclipse中使用的.cpp和.py文件关联,以便在Eclipse中选择emacs时将其用作这些文件的默认编辑器。通过这种方式,我可以结合emacs的编辑功能和Eclipse的项目/构建管理和调试功能,获得一个良好的工作流程 无论如何。。。我想阻止C-x C-C关闭我当前编辑的Emacs帧,如果它是任何给定时刻唯一可见的Emacs帧 是否有一种查询守护程序Emacs进程的方法,以找出打开了多少帧,并覆盖

我已经设置了emacs-daemon在登录到Gnome时运行,并将EmacClient与我在Eclipse中使用的.cpp和.py文件关联,以便在Eclipse中选择emacs时将其用作这些文件的默认编辑器。通过这种方式,我可以结合emacs的编辑功能和Eclipse的项目/构建管理和调试功能,获得一个良好的工作流程

无论如何。。。我想阻止C-x C-C关闭我当前编辑的Emacs帧,如果它是任何给定时刻唯一可见的Emacs帧

是否有一种查询守护程序Emacs进程的方法,以找出打开了多少帧,并覆盖默认的C-x C-C行为以不做任何事情(如果只剩下1帧),从而确保始终至少有一个可见帧打开?

一些实现此行为并可以添加到my.emacs中的elisp将非常好

奖励积分:,,
我有别名映射vi,emacs等。。。到“emacsclient-c”,所以我通常会看到emacs帧总是来来往往。另一个增强是Eclipse将我想要编辑的文件直接发送到一个特定的帧,例如使用EmacClient-c打开的第一个帧

在emacs客户端中,
save buffers kill terminal
仅调用
server save buffers kill terminal
,因此您可能希望在其上安装一个通知,以避免影响非客户端帧。
帧列表
功能cal可用于内省当前存在的帧。它显然总是为守护进程本身包含一个条目,然后为每个打开的框架包含一个条目

(defadvice server-save-buffers-kill-terminal (around dont-kill-last-client-frame activate)
  (when (< 2 (length (frame-list)))
    ad-do-it))
(defadvice服务器保存缓冲区终止终端(大约不终止最后一个客户端帧激活)
(当(<2(长度(帧列表))时)
广告(做这件事)
让emacs永垂不朽(无论您是以何种方式启动的):

使用
ad deactivate
禁用此技巧

(defadvice kill-emacs (around emacs-immortal) nil)
(ad-activate 'kill-emacs)