Существуют определенные вещи, такие как отображение конечных пробелов, отображение границ буфера, разноцветные разделители и многое другое, что я хотел бы включить в большинстве режимов или, скорее, во всех, связанных с программированием и текстом (поскольку отображение конечных пробелов в скажем ediff-mode
, столкнулся бы с основным режимом) вместо использования глобального вспомогательного режима с правилами исключений. Так как большинство режимов являются производными от prog-mode
или text-mode
, добавление рассматриваемой функции к обоим prog-mode-hook
и text-mode-hook
действительно работает, однако есть достаточно режимов, не соответствующих этой спецификации, таких как css-mode
или LaTeX-mode
.
Я хотел бы определить ловушку, которая в настоящее время охватывает все эти режимы, чтобы добавлять функции только к одной ловушке. Давайте назовем это non-special-mode-hook
(чтобы отличить это от special-mode-hook
). Как я смогу создать такой хук, который будет работать для всех основных режимов, для которых он сделан?
Ответы:
Просто сгруппируйте эти настройки вместе в функцию и добавьте эту функцию ко всем соответствующим функциям подключения:
Никакой другой способ сделать это не был бы более лаконичным: что бы ни случилось, где-то у вас будет либо белый, либо черный список режимов. На практике вы найдете только несколько режимов, которые нужно добавить в список, поэтому я бы посоветовал просто упростить задачу.
В моем собственном конфиге я использую именно этот трюк для унификации конфигурации нескольких режимов, ориентированных на lisp.
источник
derived-mode-hook-name
.(dolist ...)
vs(add-hook ...)
<repeat>. Я бы придерживаться только с месторождением при сохранении режима изменений , специфичных для отдельного (файл-в-режимеuse-package
,el-get
). Оба являются универсальными решениями, но с разных точек зрения.APPEND
аргумент, отличный от nil,add-hook
то хуки будут вызываться в обратном порядке по сравнению с порядком списка, который вы предоставляете. Ничего плохого в этом нет; просто знайте об этом, если порядок имеет значение.Вы можете добавить функцию
after-change-major-mode-hook
, которая проверяет, является ли новый режим интересным (возможно, сквозным(not (derived-mode-p 'special-mode))
), и если это так, запускаетсяnon-special-mode-hook
.источник
fundamental-mode
, но делают больше, чем просто отображают текст), но на мой вкус слишком волшебно. Отсюда и голос.Я обнаружил, что часто выполняю шаблон @ sanityinc, заключая в себе мои настройки и второстепенные активации режима в defun и циклически перебирая хуки для его вызова, но мне нужен более чистый подход, поэтому я написал этот макрос:
Примечание: я
dash.el
за чистоту, но он может быть легко адаптирован для использования(dolist)
.Затем вы можете определить сгруппированные режимы как список переменных и использовать их следующим образом:
источник
derived-mode-hook-name
чтобы получить имя переменной хука режима, тем самым избегаяintern
хитрости.derived-mode-hook-name
. хороший совет!Вместо того, чтобы определять новый хук, который работает для всех этих не производных режимов, вы можете сделать следующее.
Вам все равно нужно будет добавить его во все режимы, но, определив свою функцию для включения всех режимов, вам придется изменить только одно определение при добавлении / удалении дополнительных функций.
источник
Может быть, вы можете попробовать это:
источник