【问题标题】:Entering a minor mode with a major mode in Emacs在 Emacs 中使用主要模式进入次要模式
【发布时间】:2011-09-14 18:49:45
【问题描述】:

这个问题可能与 this question 重复,但我无法在我的 emacs 中正常工作。

每当我进入主要模式matlab-mode 时,我都会尝试进入次要模式mlint-mode(两种模式都可以在their SourceForge page 获得)。我的 .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)?你确定你真的加载了次要模式吗?
  • 这是我尝试的第一件事,但没有成功。请参阅下面的@Lindydancer 的回答..
  • 您不会那样做,因为大多数次要模式在不带参数调用时会切换它们的功能(就像您以交互方式调用它们时一样)。因此,如果已经为缓冲区启用了 mlint 模式并且您更改为 matlab 模式,则上述形式将具有切换 mlint 模式关闭的效果。因此,在使用钩子函数启用次要模式时,您通常希望传递一个参数(通常是 1 或 t,但请检查适当的文档字符串)。

标签: emacs q


【解决方案1】:

我认为正确的名称是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 模式,如果之前启用,则保持打开状态。

【讨论】:

    猜你喜欢
    • 2011-05-14
    • 2017-06-15
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多