Получить список активных второстепенных режимов в буфере

14

Как получить список активных второстепенных режимов в текущем буфере?

Документы (info "(elisp)Minor Mode Conventions")говорят:

 Define a variable whose name ends in ‘-mode’.  We call this the
 "mode variable".  The minor mode command should set this variable.
 The value will be ‘nil’ if the mode is disabled, and non-‘nil’ if
 the mode is enabled.  The variable should be buffer-local if the
 minor mode is buffer-local.

Я остановился на:

(dolist (m minor-mode-list)
  (when (symbol-value m)
    (push m modes)))

describe-mode источники имеют примечания, что:

;; Older packages do not register in minor-mode-list but only in
;; minor-mode-alist.

Я не знаю, если это все еще действительная точка ...

gavenkoa
источник
2
Не describe-modeдает ли вам адекватный список активных второстепенных режимов в текущем буфере?
Дрю
1
@ Дрю Звучит так, будто он хочет это программно?
няня
1
@nanny: Да, я догадался об этом. В этих случаях, одно место для начала было бы посмотреть на коде describe-mode- если это в противном случае адекватное.
Дрю

Ответы:

7

Попробуй это:

(mapcar #'car minor-mode-alist)

На самом деле, вы обнаружите, что это значение часто отличается от minor-mode-list.

PythonNut
источник
13

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

M-x describe-mode

Эта команда откроет новый буфер, который начинается с полного списка ваших второстепенных режимов, а также даст краткое описание основных режимов и любых родительских режимов, которые могли быть запущены.

Wilduck
источник
1
Хотя это может не совсем отвечать на вопрос ОП, это был первый результат, который я нашел при поиске этого вопроса. Поскольку комментарий Дрю решил мою проблему, я подумал, что она заслуживает полного ответа для будущих искателей.
Wilduck
+1 за демонстрацию более общего решения проблемы. describe-modeособенно полезно!
Ephsmith