在Emacs中,使用主模式进入次要模式

4
这个问题可能是这个问题的重复,但我无法让以下代码在我的Emacs中正常工作。
我试图在进入主模式matlab-mode时进入次要模式mlint-mode(两种模式都可以在SourceForge页面找到)。我在我的.emacs文件中添加了以下代码:
(add-hook 'matlab-mode-hook
      (function (lambda()
                  (mlint-mode))))

这似乎是我上面链接的问题的答案。当我打开一个.m文件时,我遇到了以下错误:

文件模式规范错误:(void-function mlint-mode)

请问有人能帮助我编写正确的钩子,以便在打开.m文件时进入mlint-mode吗?FWIW,我正在运行emacs 23.1.50.1。


为什么不直接使用(add-hook 'matlab-mode-hook 'mlint-mode)呢?你确定已经加载了这个次要模式吗? - hmakholm left over Monica
那是我尝试的第一件事,但它没有起作用。请参见@Lindydancer下面的答案。 - Dang Khoa
3
通常情况下,不建议这样做,因为大多数次要模式在无参数调用时切换其功能(就像交互调用时一样)。因此,如果对于某个缓冲区已经启用了mlint mode,并且你切换到matlab-mode,则上述形式会将mlint mode关闭。因此,在使用钩子函数启用次要模式时,通常要传递一个参数(通常为1或t,但请检查相应的docstring)。 - phils
1个回答

10

我认为正确的名称是mlint-minor-mode。此外,请确保Emacs知道所有的Matlab内容,可以使用以下方法完成:

(require 'matlab-load)

除此之外,通常在钩子中使用lambda函数是一个不好的主意。如果检查钩子的值,您会看到许多不相关的内容。而且,如果您修改lambda表达式并重新添加它,旧版本和新版本都将挂在钩子上。

相反,您可以这样做:

(defun my-matlab-hook ()
   (mlint-minor-mode 1))
(add-hook 'matlab-mode-hook 'my-matlab-hook)

“1”确保mlint模式已打开或保持打开(如果先前已启用)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接