Подтвердить что ты не робот

Есть ли крючок 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, и это было самым простым способом.

4b9b3361

Ответ 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)