У меня есть режим foo, и я бы включил для него бар-минорный режим . Так какой путь более распространен и предпочтителен?
A
(add-hook 'foo-mode-hook 'bar-minor-mode)
В
(add-hook 'foo-mode-hook (lambda ()
"Turn on `bar-minor-mode' mode."
(bar-minor-mode 1)))
С
(defun bar-minor-mode-on ()
"Turn on `bar-minor-mode' mode."
(interactive)
(bar-minor-mode 1))
(add-hook 'foo-mode-hook 'bar-minor-mode-on)
D
• вариант C, но функция перенесена в восходящий поток
Е
• вариант C, но функция хранится в рецепте плагина
hooks
minor-mode
Netsu
источник
источник
Ответы:
Это зависит от того, какую версию (версии) Emacs вы используете (или нацеливаетесь). Если вы используете исключительно Emacs 24+, вы можете смело использовать вариант A:
Это из файла NEWS, но в соответствии с комментариями рекомендуется использовать кавычки функций для символов функций, например:
Если код может потребоваться запустить под Emacs 23 (или более ранней версии), я бы выбрал вариант C, так как лично мне не нравится видеть анонимные функции в переменных хуков. (Я не уверен, что понимаю, что вы подразумеваете под вариантами D & E, запомните).
источник
Вот еще один способ сделать это, который имеет некоторые преимущества, предполагая, что вы редактируете свою собственную конфигурацию, а не пакет, который вы распространяете.
Преимущество состоит в том, что все хранится в одном хуке, поэтому чтобы отключить некоторые вещи, вам не нужно ничего делать
remove-hook
, а вместо этого комментировать некоторые вещи вcustom-foo-hook
и C-M-x.Вы даже можете написать команду, которая переходит из любого режима в свой пользовательский хук.
источник
add-hook
включение нескольких операторов для каждого второстепенного режима. Я хотел подчеркнуть, что наличие только одногоadd-hook
утверждения является преимуществом.Почему вы определяете новую команду, которая делает именно то, что
bar-minor-mode
делает?Начиная с 24.1, все они полностью эквивалентны, поэтому просто используйте менее избыточный: вариант A
источник