Отримайте список активних другорядних режимів у буфері


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.

Я не знаю, чи це все-таки дійсна точка ...


2
Не describe-modeдає вам адекватного списку активних другорядних режимів у поточному буфері?
Дрю

1
@Drew Це здається, що, можливо, він цього хоче програмно?
няня

1
@nanny: Так, я здогадався про це. У такому випадку одним містом для початку було б подивитися код на describe-mode- якщо це інакше адекватно.
Дрю

Відповіді:


7

Спробуйте це:

(mapcar #'car minor-mode-alist)

Насправді ви виявите, що ця величина часто відрізняється від minor-mode-list.


13

Якщо ви просто шукаєте, щоб побачити, які другорядні режими використовуються в буфері, але не потрібно використовувати список, що використовується програмно:

M-x describe-mode

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


1
Хоча це може не точно відповісти на питання про ОП, це був перший результат, який я знайшов під час пошуку цього питання. Оскільки коментар Дрю вирішив мій випадок використання, я вважав, що це заслуговує на повну відповідь для майбутніх шукачів.
Wilduck

+1 для демонстрації більш загального призначення проблеми. describe-modeособливо корисно!
ephsmith
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.