2012-04-10 8 views
14

Siempre obtengo un error cuando uso flymake-mode. Y el modo flymake se apaga.¿Cómo verificar si un modo menor (.e.g flymake-mode) está activado?

enter image description here

por lo que quiero comprobar si flymake-modo está activado. Si no está activado, lo encenderé antes de llamar a flymake-next-error.

Gracias.

+0

Si recibe un mensaje de error al encenderlo, ¿qué planea obtener de la verificación? –

+1

De acuerdo con su página de inicio (http://flymake.sourceforge.net/), flymake es un modo menor, no un modo principal. –

+0

Gracias. El error no ocurre todo el tiempo. Ocurrió cuando mi archivo js falló mucho. Y flymake es un modo menor. – coordinate

Respuesta

22

La mayoría de los modos menores se definen utilizando la macro define-minor-mode. Para los modos locales de búfer, esa macro crea una variable local de búfer del mismo nombre que el modo en sí . La variable no es nil cuando el modo está habilitado para el búfer en uso.

Por lo tanto, para comprobar si flymake-mode está habilitado, puede probar la variable flymake-mode (teniendo en cuenta que esta variable no se puede definir en absoluto si el modo no se ha habilitado):

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

cual, como punto de Thom en los comentarios, se puede expresar mediante la macro conveniente:

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

que podemos utilizar como condición para una expresión if o when o unless:

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

Para los modos de menor importancia a nivel mundial, la variable correspondiente es global; pero flymake-mode es buffer-local.

+0

Gracias. Es mi error. Flymake no es un modo principal, sino un modo menor. – coordinate

+3

La prueba aquí puede acortarse a '(bound-and-true-p flymake-mode)'. – Thom

Cuestiones relacionadas