Есть ли крючок Emacs, который запускается после создания каждого буфера?
Я хочу запускать некоторый код каждый раз, когда Emacs создает буфер. Есть ли крючок для этого? Что-то с таким именем, как after-make-buffer-functions
?
Изменить: если кто-то хочет знать, для чего я этого хотел, вы можете прочитать соответствующую часть моей конфигурации Emacs: https://github.com/DarwinAwardWinner/dotemacs/blob/master/site-lisp/settings/tempbuf-settings.el
В принципе, я хочу, чтобы режим tempbuf был включен во всех буферах с некоторыми основными режимами. Поэтому ответ Lindydancer на самом деле более уместен, чем то, что я изначально искал.
Я знаю, что уже могу включить tempbuf-mode в определенных режимах, добавив привязку режима tempbuf ко всем этим основным режимам, но я хотел сделать его доступным для редактирования через M-x customize
, и это было самым простым способом.
Ответы
Ответ 1
К сожалению, нет. Emacs использует низкоуровневую функцию'get-buffer-create 'для создания буферов и не предоставляет никакого механизма hook.
Вы можете использовать совет для вызова всех вызовов этой функции, хотя я бы не рекомендовал этот метод, поскольку он довольно навязчив. ( Обновить. Крюк для консультаций будет видеть только вызовы из elisp, а не вызовы из основных частей Emacs C.)
Есть несколько альтернатив, которые вы могли бы использовать, в зависимости от того, что вы реализуете:
-
change-major-mode-hook
- вызывается перед изменением основного режима.
-
after-change-major-mode-hook
- вызывается, когда основной режим начинает меняться.
Ответ 2
Вы можете использовать buffer-list-update-hook
buffer-list-update-hook
Это нормальный запуск при каждом изменении списка буфера
Вы можете определить функцию, которая сделает все, что вы хотите.
(defun awesome-foo ()
;; do awesome things
)
Подключить эту функцию к списку буфера списка
(add-hook 'buffer-list-update-hook 'awesome-foo)