如何通过鼠标在“kill-emacs”之前自动调用函数?

Posted

技术标签:

【中文标题】如何通过鼠标在“kill-emacs”之前自动调用函数?【英文标题】:How to automatically call a function before "kill-emacs" by mouse? 【发布时间】: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)

【问题讨论】:

【参考方案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)

以上是关于如何通过鼠标在“kill-emacs”之前自动调用函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式调用 jQuery UI Draggable 拖动开始?

在Dreamweaver中,如何实现鼠标经过文字时在鼠标旁边自动出现图片?

用C语言如何实现鼠标自动点击?

C语言鼠标操作

如何使用python来模拟鼠标点击(将通过实例自动化模拟在360浏览器中自动搜索"python")

C++如何自动调用析构函数?