在使用 emacsW32 的 windows 上关闭当前窗口 (x) 时,如何保持 emacs 服务器运行?

Posted

技术标签:

【中文标题】在使用 emacsW32 的 windows 上关闭当前窗口 (x) 时,如何保持 emacs 服务器运行?【英文标题】:how do i keep emacs server running when the current window is closed (x) on windows using emacsW32? 【发布时间】:2010-01-04 19:07:24 【问题描述】:

我在 Windows 上使用EmacsW32 (patched)。 Emacs 在服务器模式下运行,因此后续对 emacsclientw 的调用会在同一个服务器会话中打开文件。

我已经映射了 C-x C-c 以使当前帧不可见并且不会杀死 emacs 服务器进程。我想单击窗口的 X (关闭)按钮也只是隐藏框架而不像当前那样终止服务器进程。

有什么想法吗?谢谢!

【问题讨论】:

请问您如何“使当前帧不可见而不杀死 emacs 服务器进程”? 没关系,我找到了...作为参考,这非常有效:emacs-fu.blogspot.com/2009/03/windows-and-daemons.html 【参考方案1】:

当然,我有办法做到这一点。可能会有一些改进,但这是一个很好的起点。

首先,我设置一个变量并建议 kill-emacs 函数

(defvar bnb/really-kill-emacs nil)
(defadvice kill-emacs (around bnb/really-exit activate)
    "Only kill emacs if the variable is true"
    (if bnb/really-kill-emacs
        ad-do-it)
      (bnb/exit))

bnb/exit 函数只是使框架不可见,就像您绑定到 C-x C-c 的那样。

如果有必要,我还有一个额外的功能可以正确退出 emacs。这将设置变量并按如下方式调用 kill-emacs。

(defun bnb/really-kill-emacs ()
    (interactive)
    (setq bnb/really-kill-emacs t)
    (kill-emacs))

【讨论】:

谢谢!大多数时候我会使用 C-x C-c,但最近发现自己在窗外 X'ing 并且服务器重新启动让我发疯:-) +1 感谢您的提示...但是您是否介意也提供 bnb/exit 功能?我将这段代码放在我的 init.el 中,现在如果不调用 bnb/really-kill-emacs 就无法退出,因为它显示“Symbol 的函数定义无效:bnb/exit”。抱歉,我是 emacs 新手,不知道如何编写有问题的函数。

以上是关于在使用 emacsW32 的 windows 上关闭当前窗口 (x) 时,如何保持 emacs 服务器运行?的主要内容,如果未能解决你的问题,请参考以下文章

构建之法读后感part1

关键词研究

如何在 Windows 中使用 rundll32.exe 删除文件?

使用 32 位 JRE 打开 64 位 windows 虚拟键盘

sqli-labs

`DllMainCRTStartup@12' 的多重定义,同时使用 mingw32 在 Windows 上构建 glew