Как проверить, включен ли второстепенный режим (.e.g flymake-mode)?
Я всегда получаю ошибку при использовании flymake-mode. И режим flymake отключится.
Итак, я хочу проверить, включен ли режим flymake. Если он не включен, я включу его перед вызовом flymake-next-error.
Спасибо.
Ответ 1
Большинство второстепенных режимов определяются с помощью макроса define-minor-mode. Для буферных локальных режимов этот макрос создает локальную переменную buffer с тем же именем, что и сам режим 1. Эта переменная имеет значение nil, если режим включен для текущего буфера.
Поэтому, чтобы проверить, включен ли flymake-mode, вы можете протестировать переменную flymake-mode (отметив, что эта переменная вообще не может быть определена, если режим не был включен):
(and (boundp 'flymake-mode) flymake-mode)
Что, как указывает Том в комментариях, можно выразить с помощью удобного макроса:
(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"))
1 Для глобальных второстепенных режимов соответствующая переменная глобальна; но режим flymake - буферно-локальный.
Ответ 2
Другое решение состоит в том, чтобы использовать M-x describe-mode, чтобы показать все активные второстепенные режимы (и основной режим) и краткое описание каждого.
Если второстепенный режим включен в текущем буфере, вы можете найти его имя во всплывающем буфере.