- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在 Emacs 中找到一个钩子(Hook),它应该在 Emacs 服务器正常关闭之前触发。
我尝试了使用 elisp 的 kill-emacs-query-functions、kill-emacs-hook、server-done-hook,例如:
(add-hook 'server-done-hook
'(lambda ()
(savehist-save)
)
)
最佳答案
从 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-autosave
在 kill-emacs-hook
.
关于Emacsclient 钩住 kill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3737207/
我试图在 Emacs 中找到一个钩子(Hook),它应该在 Emacs 服务器正常关闭之前触发。 我尝试了使用 elisp 的 kill-emacs-query-functions、kill-emac
我是一名优秀的程序员,十分优秀!