2012-04-10 1 views
14

Ricevo sempre un errore quando uso la modalità flymake. E la modalità flymake si spegne.Come verificare se una modalità minore (.e.g modalità flymake) è attiva?

enter image description here

quindi voglio verificare se flymake-modalità è attiva. Se non è attivo, lo accenderò prima di chiamare flymake-next-error.

Grazie.

+0

Se si verifica un errore all'accensione, cosa si intende ottenere dal controllo? –

+1

Secondo la sua homepage (http://flymake.sourceforge.net/), flymake è una modalità secondaria, non una modalità principale. –

+0

Grazie. L'errore non si verifica sempre. Si è verificato quando il mio file js ha fallito molto. E flymake è una modalità secondaria. – coordinate

risposta

22

La maggior parte delle modalità secondarie sono definite utilizzando la macro define-minor-mode. Per le modalità locali del buffer, quella macro crea una variabile locale del buffer con lo stesso nome della modalità stessa . La variabile non è nil quando la modalità è abilitata per il buffer corrente.

Pertanto per controllare se flymake-mode è abilitato, è possibile verificare la variabile flymake-mode (notare che questa variabile non può essere definito a tutti se la modalità non è stata abilitata):

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

Che, come punto di Thom nei commenti, può essere espressa tramite il comodo macro:

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

cui possiamo usare come la condizione per un'espressione if o when o unless:

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

Per modalità secondarie globali, corrispondente variabile è globale; ma flymake-mode è buffer-local.

+0

Grazie. È il mio errore. Flymake non è una modalità principale, ma una modalità secondaria. – coordinate

+3

Il test qui può essere abbreviato in '(modalità flymake bound-and-true-p)'. – Thom