Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check whether a minor mode(.e.g flymake-mode) is on?

Tags:

emacs

flymake

I always get error when use flymake-mode. And flymake-mode turn off.

enter image description here

So I want to check whether flymake-mode is on. If it is not on, I will turn it on before call flymake-next-error.

Thanks.

like image 586
coordinate Avatar asked Apr 10 '12 11:04

coordinate


2 Answers

Most minor modes are defined using the define-minor-mode macro. For buffer-local modes, that macro creates a buffer-local variable of the same name as the mode itself1. The variable is non-nil when the mode is enabled for the current buffer.

Therefore to check whether flymake-mode is enabled, you can test the variable flymake-mode (noting that this variable might not be defined at all if the mode has not been enabled):

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

Which, as Thom point out in the comments, can be expressed using the convenient macro:

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

Which we can use as the condition for an if or when or unless expression:

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

1 For global minor modes, the corresponding variable is global; but flymake-mode is buffer-local.

like image 116
phils Avatar answered Sep 28 '22 04:09

phils


Another solution is to use M-x describe-mode to show all the active minor modes (and major mode) and a brief description of each.

If the minor mode is on in the current buffer, you can find it's name on the popup buffer.

like image 43
Ynjxsjmh Avatar answered Sep 28 '22 04:09

Ynjxsjmh