gpt4 book ai didi

emacs - 退出 Emacs 时自动停止进程

转载 作者:行者123 更新时间:2023-12-04 04:32:34 24 4
gpt4 key购买 nike

当我键入 C-x C-c 命令(save-buffers-kill-terminal 退出emacs),因为我想在每次键入 C-x C-c 时摆脱“存在事件进程;杀死它们并退出?(是或否)”消息。为了实现我的目标,我正在考虑编写一个钩子(Hook):

(add-hook 'save-buffers-kill-terminal
(lambda () (httpd-stop)
))

但是没有用。当我键入 C-x C-c 时,我继续收到消息“存在事件进程;杀死它们并退出?(是或否)”。

我怎样才能实现我的目标?

谢谢!

最佳答案

没有名为 save-buffers-kill-terminal 的钩子(Hook).

有一个同名的函数,但并非每个函数都自动存在 Hook (advice 机制实际上促进了这一点,但你在这里不需要它(编辑:或者你可能需要; 见下文))。

一个钩子(Hook)只有在有代码明确地用 run-hooks 运行它时才存在,或类似的(例如 C-u C-h a run.*hook RET )。或者更具体地说,您可以 add-hook与任意变量一起使用,但它永远不会用作钩子(Hook),除非有东西运行它。

通常您会使用 kill-emacs-hook 中的任一个(如果回调不需要与用户交互),或者kill-emacs-query-functions如果可能需要互动。有关详细信息,请参阅每个变量的帮助。

编辑:

在事件进程的情况下,需要一种不同的机制,因为这些查询发生在这些 Hook 中的任何一个运行之前。

如果只是想避免查询,让进程被杀死,可以使用set-process-query-on-exit-flag .这设置了一个每个进程的标志,它决定了这个查询是否会发生:

set-process-query-on-exit-flag is a built-in function in `process.c'.

(set-process-query-on-exit-flag PROCESS FLAG)

Specify if query is needed for PROCESS when Emacs is exited.
If the second argument FLAG is non-nil, Emacs will query the user before
exiting or killing a buffer if PROCESS is running. This function
returns FLAG.

您可能会在启动该过程时安排它(假设您有一些启动 httpd 的代码),获得 PROCESS(get-process NAME)(get-buffer-process BUFFER) .我没有使用这个 httpd 库,所以我不知道你在这里需要什么。

如果你确实想调用像httpd-stop这样的正常关闭函数,我认为您需要做一些自定义的事情。

(defadvice save-buffers-kill-emacs (before my-httpd-auto-stop)
(when (httpd-is-running-p) ;; not a real predicate
(httpd-stop)))
(ad-activate 'save-buffers-kill-emacs)

你必须弄清楚用什么来代替我假设的 httpd-is-running-p , 确定是否调用停止函数。

请注意,这将在任何其他查询之前运行,因此您可能会以这种方式停止 httpd,但最终还是决定不终止 emacs(但不管怎样,这种事情都是可能的)。

编辑: 或者,由于无论 httpd 是否正在运行调用此停止函数显然是安全的,您可以使用以下内容(包括添加的测试以查看 httpd-stop 是否已定义,否则调用它将出错,而且我不确定您是如何加载库的):

(defadvice save-buffers-kill-emacs (before my-httpd-auto-stop)
(when (fboundp 'httpd-stop)
(httpd-stop)))
(ad-activate 'save-buffers-kill-emacs)

关于emacs - 退出 Emacs 时自动停止进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20339604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com