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

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

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

Благодарю.

1 ответ

Решение

Большинство второстепенных режимов определяются с помощью define-minor-mode макро. Для локальных буферных режимов этот макрос создает локальную переменную буфера с тем же именем, что и сам режим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 является локальным для буфера.

Другое решение состоит в том, чтобы использовать режим описания Mx, чтобы показать все активные второстепенные режимы (и основной режим) и краткое описание каждого из них.

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

Другие вопросы по тегам