如何通过鼠标在“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-hook
或kill-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中,如何实现鼠标经过文字时在鼠标旁边自动出现图片?