2012-04-10 1 views
14

Я всегда получаю ошибку при использовании flymake-mode. И режим flymake отключается.Как проверить, включен ли второстепенный режим (.e.g flymake-mode)?

enter image description here

Так что я хочу, чтобы проверить, является ли flymake-режим включен. Если он не включен, я включу его перед вызовом flymake-next-error.

Спасибо.

+0

Если вы получаете сообщение об ошибке при включении, что вы планируете получить от проверки? –

+1

Согласно своей домашней странице (http://flymake.sourceforge.net/), flymake - это второстепенный режим, а не основной режим. –

+0

Спасибо. Ошибка не возникает постоянно. Это произошло, когда у моего js-файла много сбоев. И flymake - второстепенный режим. – coordinate

ответ

22

Большинство второстепенных режимов определяются с использованием макроса define-minor-mode. Для буферных локальных режимов этот макрос создает локальную переменную буфера с тем же именем, что и сам режим . Переменная имеет значение не nil, когда режим включен для текущего буфера.

Поэтому проверить, является ли flymake-mode включена, то вы можете проверить переменную flymake-mode (заметим, что эта переменная не может быть определена на всех, если режим не был включен):

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

Который, как точка Thom в комментариях, можно выразить с помощью удобного макроса:

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

который мы можем использовать в качестве условия для выражения if или when или unless:

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

Для глобальных второстепенных режимов, соответствующая переменная является глобальной; но режим flymake - буфер-локальный.

+0

Спасибо. Это моя ошибка. Flymake не является основным режимом, а второстепенным. – coordinate

+3

Тест здесь может быть сокращен до просто '(bound-and-true-p flymake-mode)'. – Thom