我已经开发了一些自定义扩展来emacs-lisp-mode
。这些扩展的入口点是通过函数my-elisp-mode-setup
。这些扩展应该仅在访问带有 Lisp 代码的缓冲区时可用。我尝试了以下方法:
(add-hook 'emacs-lisp-mode-hook 'my-elisp-mode-setup)
然而,事实证明,这个模式钩子是为任何文件类型执行的,这会导致与其他文件钩子中的变量混淆。
为了调试这种情况,我将~/.emacs
减少到以下内容:
(defun my-elisp-mode-setup ()
(message "kkkkk"))
(add-hook 'emacs-lisp-mode-hook 'my-elisp-mode-setup)
然后,我使用 emacs t.txt
从命令行运行 emacs(其中t.txt
是任何虚拟文件)。所以对于这个特定的文件(t.txt
),我不希望运行钩子,因为t.txt
不是Lisp文件。但是,在*Messages*
缓冲区中,我得到:
kkkkk
For information about GNU Emacs and the GNU system, type C-h C-a.
表示钩子已运行(由于文本kkkkk
)。
如果你想要的只是为*.el
文件做你的emacs-lisp-mode
东西,那么只需让你的东西测试buffer-file-name
以获得*.el
匹配。 IOW,my-elisp-mode-setup
(可能更恰当地称为my-.el-file-setup
)将是无操作的,除非访问的文件的名称与任何模式匹配(例如 *.el
) 你想要。