如何检查是否有次模式(.eg flymake-mode)?

coo*_*ate 19 emacs flymake

使用flymake-mode时总是会出错.并且flymake模式关闭.

在此输入图像描述

所以我想检查是否启用了flymake-mode.如果没有打开,我会在调用flymake-next-error之前将其打开.

谢谢.

phi*_*ils 33

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

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

(and (boundp 'flymake-mode) flymake-mode)
Run Code Online (Sandbox Code Playgroud)

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

(bound-and-true-p flymake-mode)
Run Code Online (Sandbox Code Playgroud)

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

(if (bound-and-true-p flymake-mode)
    (message "flymake-mode is on")
  (message "flymake-mode is off"))
Run Code Online (Sandbox Code Playgroud)

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

  • 这里的测试可以缩短为`(bound-and-true-p flymake-mode). (4认同)