我在我的 .emacs 文件中运行以下代码:
(defun load-hooks ()
(add-hook 'after-save-hook 'my-hook))
(add-hook 'c-mode-hook 'load-hooks)
(defun my-hook () ... )
但是,my-hook
即使我处于不同的模式,其中的内容也会在保存时运行。我错过了一步吗?
您应该使用 LOCAL 参数add-hook
,这将确保挂钩仅影响当前缓冲区:
(defun load-hooks ()
(add-hook 'after-save-hook 'my-hook nil t))
(add-hook 'c-mode-hook 'load-hooks)
(defun my-hook () ...)
我认为调用(add-hook 'after-save-hook 'my-hook)
将load-hooks
钩子添加到所有模式。也就是说,一旦调用了该函数,after-save-hook
也会为每个其他缓冲区修改。
我怀疑除非你打开 ac 文件,否则你的钩子不会运行。尝试在没有打开任何 c 文件的情况下打开一些文件,看看是否有任何运行。如果不是,则仅表示为 c 文件运行的函数会修改其他所有内容的保存挂钩。
Tikhon 关于影响所有模式的“保存后挂钩”是正确的——我现在依靠使用以下功能进行检查:
(defun in-c-mode? ()
(string= (current-major-mode) "c-mode"))
(defun current-major-mode ()
(with-current-buffer (current-buffer) major-mode))