如何检查一个次要模式(例如flymake-mode)是否已开启?

33

当我使用flymake-mode时,经常会遇到错误并且flymake-mode关闭了。

图片描述

因此我想要检查flymake-mode是否开启。如果没有开启,我会在调用flymake-next-error之前将其打开。

谢谢。


如果你打开它时出现错误,你计划通过检查获得什么? - Noufal Ibrahim
1
根据其主页(http://flymake.sourceforge.net/)的介绍,flymake是一个次要模式,而不是主要模式。 - Luke Girvin
谢谢。错误并不总是发生。它发生在我的JS文件有很多失败时。而flymake是一个次要模式。 - coordinate
2个回答

50

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

因此,要检查是否启用了flymake-mode,可以测试变量flymake-mode(请注意,如果尚未启用该模式,则可能根本不存在该变量):

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

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

(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 对于全局小模式,相应的变量是 global;但是 flymake-mode 是缓冲区本地的。


谢谢。这是我的错误。Flymake 不是一个主模式,而是一个次模式。 - coordinate
5
这里的测试可以缩短为(bound-and-true-p flymake-mode) - Thom
M-:用于打开迷你缓冲区,您可以在其中评估表达式。 - jgomo3

4

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

如果在当前缓冲区中启用了该次要模式,则可以在弹出的缓冲区中找到其名称。


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