Как вы перечисляете активные второстепенные режимы в emacs?
emacs
minor-mode
Только чтение
источник
источник
boundp
вместоsymbolp
вы можете избавиться отcondition-case
.describe-mode
может как-то составить список включенных второстепенных режимов, почему я не мог? Итак, прочитав его исходный код, я понял, что он получает список активных второстепенных режимов от обоихminor-mode-list
иminor-mode-alist
. Используя стороннююdash.el
библиотеку управления списками, я пришел с этим кодом:Так, например, чтобы отключить все второстепенные режимы, используйте
-each
:Не забудьте сохранить список второстепенных режимов в переменной, иначе вам придется перезапустить Emacs или включить их по памяти.
источник
Если вы хотите что-то программно сделать со всеми буферами, в которых активен определенный режим, то лучшее, самое минималистичное и чистое встроенное решение выглядит следующим образом:
Он делает следующее:
buffer-list
, с текущим активным буфером во главе списка (так что сначала обрабатывается, обычно то, что вы хотите, но оставьтеcurrent-buffer
параметр, если вам все равно).$buf
.with-current-buffer $buf
чтобы сообщить Emacs, что весь код внутри тела должен выполняться так, как если бы он выполнялся внутри буфера,$buf
а не из того буфера, который вы действительно отображаете на экране.when <some mode variable>
это правильный способ проверить, включен ли режим; Вы также можете использоватьif
и другие подобные методы. В любом случае цель состоит в том, чтобы проверить, установлена ли в буфере переменная основного режима второстепенного или основного режима. Почти все режимы определяют переменную через "определение" режима, что автоматически заставляет их создавать локальную в буфере переменную, названную в честь режима, вот как это работает. А если у них нет стандартной переменной, посмотрите их собственный исходный код, чтобы увидеть, как их «переключающий» код определяет, как их включать и выключать. 99% из них используют наличие переменной своего модного имени (и если они этого не делают, я предлагаю сообщить об этом как об ошибке автору режима). Например, чтобы проверить, активен ли в буфере режим пробелов, вы бы сказалиwhen whitespace-mode
.Наслаждайтесь! Вперед к большему и чистому коду lisp!
источник
Вот простой альтернативный фрагмент, похожий на некоторые методы, которые уже рассматривались в других ответах:
источник