【问题标题】:How to check whether a minor mode(.e.g flymake-mode) is on?如何检查次要模式(例如flymake-mode)是否打开?
【发布时间】:2012-04-10 11:47:00
【问题描述】:

我在使用 flymake-mode 时总是出错。并且 flymake-mode 关闭。

所以我想检查 flymake-mode 是否打开。如果没有打开,我会在调用 flymake-next-error 之前打开它。

谢谢。

【问题讨论】:

  • 如果您在打开它时遇到错误,您打算从检查中获得什么?
  • 根据它的主页(flymake.sourceforge.net),flymake是次要模式,不是主要模式。
  • 谢谢。错误并非一直发生。它发生在我的 js 文件有很多失败的时候。而flymake是次要模式。

标签: emacs flymake


【解决方案1】:

大多数次要模式是使用define-minor-mode 宏定义的。对于缓冲区局部模式,该宏会创建一个与模式本身同名的缓冲区局部变量1。当前缓冲区启用模式时,变量为非nil

因此要检查flymake-mode是否启用,可以测试变量flymake-mode(注意如果没有启用该模式,这个变量可能根本没有定义):

(and (boundp 'flymake-mode) flymake-mode)

正如 Thom 在 cmets 中指出的那样,可以使用方便的宏来表示:

(bound-and-true-p flymake-mode)

我们可以将其用作ifwhenunless 表达式的条件:

(if (bound-and-true-p flymake-mode)
    (message "flymake-mode is on")
  (message "flymake-mode is off"))

1 对于全局次要模式,对应的变量是全局的;但是 flymake-mode 是缓冲区本地的。

【讨论】:

  • 谢谢。这是我的错。 Flymake 不是主要模式,而是次要模式。
  • 这里的测试可以缩短为(bound-and-true-p flymake-mode)
  • M-: 打开一个可以计算表达式的小缓冲区。
【解决方案2】:

另一种解决方案是使用 M-x describe-mode 显示所有活动的次要模式(和主要模式)以及每种模式的简要说明。

如果当前缓冲区中打开了次要模式,您可以在弹出缓冲区中找到它的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    相关资源
    最近更新 更多