如何仅在访问带有 .el 后缀的文件时加载 emacs-lisp-mode-hook



我已经开发了一些自定义扩展来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 ) 你想要。

最新更新