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