如果在最后打开的帧内,Emacs C-x C-c覆盖save-buffers-kill-terminal

时间:2010-09-11 12:44:14

标签: eclipse emacs daemon

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

Anyhoo ...我想阻止C-x C-c关闭我正在编辑的Emacs帧,如果它是唯一在任何给定时刻仍然可见的Emacs帧。

有没有办法查询守护进程Emacs进程以找出打开的帧数,并覆盖默认的Cx Cc行为,什么都不做(如果只剩下1帧),从而确保始终至少一个可见的框架始终打开?

实现此行为并且可以添加到我的.emacs的一些elisp会很棒。

奖励积分:¬) 我有别名,将vi,emacs等映射到“emacsclient -c”,所以我总是会得到emacs帧来来去去。 Eclipse的另一个增强功能是将我想要编辑的文件直接发送到特定的框架,例如第一帧用emacsclient -c打开。

2 个答案:

答案 0 :(得分:1)

让emacs不朽(无论你怎样开始它):

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

使用ad-deactivate停用此技巧。

答案 1 :(得分:0)

在emacs-clients中,save-buffers-kill-terminal仅调用server-save-buffers-kill-terminal,因此您可能需要在其上安装建议,以免影响非客户端帧。 frame-list函数cal用于内省当前存在的帧。它显然总是包含守护进程本身的一个条目,然后每个开放框架包含一个条目。

(defadvice server-save-buffers-kill-terminal (around dont-kill-last-client-frame activate)
  (when (< 2 (length (frame-list)))
    ad-do-it))