代码之家  ›  专栏  ›  技术社区  ›  codeasone

Emacs C-x C-C重写save buffers kill terminal if在最后一个打开的帧内

  •  2
  • codeasone  · 技术社区  · 14 年前

    我已经准备好了 登录到Gnome并关联 emacsclient公司 使用我在Eclipse中使用的.cpp和.py文件,以便在Eclipse中选择emacs作为这些文件的默认编辑器。这样我就可以得到一个很好的工作流程,将emacs的编辑功能与Eclipse的项目/构建管理和调试功能结合起来。

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

    一些实现这种行为并可以添加到my.emacs中的elisp会很好。

    加分:) 具体的 框架,例如用emacsclient-c打开的第一个框架。

    2 回复  |  直到 14 年前
        1
  •  0
  •   rafl    14 年前

    在emacs客户端中, 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))
    
        2
  •  1
  •   Jérôme Radix    14 年前

    让emacs不朽(不管你是怎么开始的):

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

    使用 ad-deactivate