是否有一个Emacs钩子在每个缓冲区创建后运行?

时间:2011-10-26 07:45:10

标签: emacs elisp

每次Emacs创建缓冲区时,我都希望运行一些代码。有这个挂钩吗?名称为after-make-buffer-functions的东西?

编辑:如果有人想知道我想要的是什么,你可以在这里阅读我的Emacs配置的相关部分:https://github.com/DarwinAwardWinner/dotemacs/blob/master/site-lisp/settings/tempbuf-settings.el

基本上,我希望在具有某些主要模式的所有缓冲区中启用tempbuf模式。所以Lindydancer的回答实际上比我原来想要的更合适。

我知道我已经可以通过在所有主要模式挂钩中添加tempbuf模式挂钩来在特定模式下启用tempbuf模式,但我希望通过M-x customize使其可编辑,这是最简单的方法

2 个答案:

答案 0 :(得分:15)

不幸的是,没有。 Emacs使用低级函数'get-buffer-create'来创建缓冲区,它不提供任何钩子机制。

可以使用建议来获取对此函数的所有调用,即使我不推荐这种方法,因为它非常具有侵入性。 (更新:建议挂钩只会看到来自elisp的调用,而不是来自Emacs C核心部分的调用。)

您可以使用一些替代方案,具体取决于您正在实施的内容:

  • change-major-mode-hook - 在主要模式更改之前调用。
  • after-change-major-mode-hook - 主要模式开始变化时调用。

答案 1 :(得分:4)

您可以使用buffer-list-update-hook

  

buffer-list-update-hook

     

每当缓冲区列表发生变化时,这是一个正常的钩子运行

您可以定义一个函数来执行任何操作。

 (defun awesome-foo ()
     ;;  do awesome things
   )

将该函数挂钩到缓冲列表钩子

 (add-hook 'buffer-list-update-hook 'awesome-foo)