Объединить два хука для одного и того же режима в один

#emacs #elisp

#emacs #elisp

Вопрос:

Как я могу объединить эти две строки в один хук?

   (add-hook 'web-mode-hook #'(lambda () (yas-activate-extra-mode 'html-mode)))
  (add-hook 'web-mode-hook #'(lambda () (yas-activate-extra-mode 'css-mode))))
  

Все, что я пробовал до сих пор, не сработало.

Спасибо

Ответ №1:

mapcar я полагаю, это то, что вы хотите:

 (add-hook 'web-mode-hook (lambda ()
                           (mapcar #'yas-activate-extra-mode
                                   '(html-mode css-mode))))
  

(Я использую старую версию yasnippet, поэтому не смог это протестировать.)

Комментарии:

1. или : (add-hook 'web-mode-hook (lambda () (yas-activate-extra-mode 'html-mode) (yas-activate-extra-mode 'css-mode) ))

2. Согласен: это довольно просто (и, вероятно, более удобно для нового пользователя).

3. Вы также должны использовать mapc в этом сценарии и нет mapcar . mapc работает так же, за исключением того, что не собирает все результаты в список, который вы не используете. Также лучше использовать именованные функции для перехватов, а не лямбды. Таким образом, вы можете легко удалить их по имени, если это необходимо. например (add-hook 'web-mode-hook (defun my-web-mode-setup-hook () ...)) , или, что еще лучше, определите функцию в другом месте и просто передайте имя в кавычках, чтобы вы могли легче переопределить перехват, не удаляя его или оценивая что-то глубоко вложенное в конфигурационный код.

4. Согласовано с именованной функциональной точкой; ответом была просто попытка изменить код OP как можно меньше. И согласился, что mapc это было бы хорошо, поскольку все это для побочных эффектов.

5. lawlist, не могли бы вы написать свой комментарий в качестве ответа, чтобы я мог пометить его как правильный? 😀 Спасибо

Ответ №2:

 (add-hook 'web-mode-hook (lambda ()
  (yas-activate-extra-mode 'html-mode)
  (yas-activate-extra-mode 'css-mode) ))