kill-emacs-hook 什么时候被调用?

When is kill-emacs-hook called?

如果我有一些未保存的缓冲区,kill-emacs-hook 什么时候调用?

场景A

  1. 用户调用 kill-emacs.
  2. 提示保存修改后的缓冲区。
  3. 取消kill-emacs操作(C-g)。
  4. 用户继续使用 emacs。

场景 B

  1. 用户调用 kill-emacs.
  2. 提示保存修改后的缓冲区。
  3. 保存所有修改的缓冲区
  4. Emacs 被杀死。

我 运行 这行代码并退出 emacs 以测试发生了什么。

(add-hook 'kill-emacs-hook (lambda () (message "test")))

结论是 "test was" 未在 Scenario A 中打印,但在 Scenario B 中打印在步骤 3.4.

之间

在示例 B 中打印 "text" 之后多了几行输出,但没有更多的用户输入。

运行 kill-emacs-hookkill-emacs 做的第一件事。

您的两种方案均无效。如果用户直接调用 kill-emacs,则 不会 提示用户保存缓冲区(只有在调用 save-buffers-kill-emacs 时才会这样做)。

对于后者,如果用户中止查询以保存缓冲区,或者 kill-emacs-query-functions return nil 的任何成员,则 kill-emacs 永远不会打电话。