【问题标题】:How to automatically call a function before "kill-emacs" by mouse?如何通过鼠标在“kill-emacs”之前自动调用函数?
【发布时间】:2013-09-23 17:08:35
【问题描述】:

我需要在关闭 Emacs (C-x C-c) 之前调用“my-global-modified-flag-update”函数。 此函数将我不需要保存的缓冲区标记为未修改,从而避免 Emacs 向我询问。 当然,它必须作为第一个任务运行,在 Emacs 询问我保存文件之前。

这是我对键盘命令“C-x C-c”(save-buffers-kill-terminal)的简单解决方案

(defun my-kill-emacs()
   (interactive)
   (my-global-modified-flag-update)
   (save-buffers-kill-terminal))
(global-set-key (kbd "C-x C-c") 'my-kill-emacs)

用鼠标关闭 Emacs 时如何做同样的事情? (点击窗口右上角X)

【问题讨论】:

    标签: emacs elisp exit quit


    【解决方案1】:

    我能想到的最简单的选择是,如果钩子对你来说还不够,建议save-buffers-kill-emacs

    试试这个:

    (defadvice save-buffers-kill-emacs (before update-mod-flag activate)
        (my-global-modified-flag-update))
    

    【讨论】:

    • 是的,它工作正常!此外,它适用于所有 Emacs Quit 源(键盘、鼠标和菜单)。
    【解决方案2】:

    根本不要那样做。只需使用kill-emacs-hookkill-emacs-query-functions。请参阅 Elisp 手册,节点 Killing Emacs

    【讨论】:

    • 谢谢德鲁。我在我的问题中添加了更多信息。我已按照您的指示进行操作,但没有幸运。问题是“kill-emacs-hook”和“kill-emacs-query-functions”没有将我的函数作为第一个任务调用,而是在 Emacs 询问我保存文件之后。太晚了。
    • 对。然后执行此操作:(setq confirm-emacs 'my-global-modified-flag-update)confirm-emacs 的值的函数只需要是一个接受至少一个 arg 的谓词。如果它返回nil,那么 Emacs 不会退出;否则它是。例如:(defun my-blah (__) (message "Howdy!") (sleep-for 3) t)(setq confirm-kill-emacs 'my-blah)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 2021-09-21
    • 2018-05-15
    相关资源
    最近更新 更多