Подтвердить что ты не робот

Как проверить, включен ли второстепенный режим (.e.g flymake-mode)?

Я всегда получаю ошибку при использовании flymake-mode. И режим flymake отключится.

enter image description here

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

Спасибо.

4b9b3361

Ответ 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, чтобы показать все активные второстепенные режимы (и основной режим) и краткое описание каждого.

Если второстепенный режим включен в текущем буфере, вы можете найти его имя во всплывающем буфере.