gpt4 book ai didi

Emacsclient 钩住 kill

转载 作者:行者123 更新时间:2023-12-04 05:59:00 25 4
gpt4 key购买 nike

我试图在 Emacs 中找到一个钩子(Hook),它应该在 Emacs 服务器正常关闭之前触发。
我尝试了使用 elisp 的 kill-emacs-query-functions、kill-emacs-hook、server-done-hook,例如:

(add-hook 'server-done-hook
'(lambda ()
(savehist-save)
)
)

...但是当操作系统关闭时,它们都不会被调用,因此不会保存历史记录。

也许有人可以给出提示?

附言我在 Gentoo Linux 上,emacs-vcs-23.2.9999 包,仅限终端。为了测试所需的行为,Emacs 使用 start-stop-daemon 实用程序停止。

最佳答案

Emacs 24.1 , Emacs 运行 kill-emacs 运行 kill-emacs-hook 中的函数.所以这个问题,以及这个答案的其余部分,只与旧版本有关。

在 Emacs 关闭之前运行某些东西的正确位置是 kill-emacs-query-function如果您希望能够取消关机或kill-emacs-hook如果你不这样做。您面临的问题是您的操作系统没有通知 Emacs 以 Emacs 理解的方式优雅地关闭,或者以另一种方式看待它,Emacs 不理解您的操作系统请求优雅地关闭。

从外部关闭 Emacs 23 的一种优雅方式是运行 emacsclient -n -e '(kill-emacs)' .这显然不是告诉程序正常关闭的通用方式。

在 unix 上正常关闭进程的正常方法是向其发送 SIGHUP 或 SIGTERM 信号。不幸的是,Emacs 几乎将所有信号都视为致命信号,并且仅在收到它们时运行紧急自动保存并且不运行 lisp 代码。这不能从 lisp 配置。 A different behavior has been requested, but turned down .

部分解决方法(found here)是在 delete-frame-functions 中运行 session 保存 Hook 。 .这个钩子(Hook)很可能在系统关闭序列之前运行,无论是在您关闭最后一帧时还是在 X 服务器死机时(如果您在终端中运行 Emacs,则带上您的终端)。确保你没有运行在 delete-frame-functions 中杀死服务器的钩子(Hook)。 .

顺便说一句,如果您打算使用这个确切的钩子(Hook),请注意您的代码是一种复杂的编写方式 (add-hook 'server-done-hook 'savehist-save) ,这没有用,因为已经有 savehist-autosavekill-emacs-hook .

关于Emacsclient 钩住 kill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3737207/

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