我有一个Emacs扩展程序,它创建了一个名为*erl-output*
的缓冲区。默认情况下,此缓冲区仅使用fundamental-mode
。是否有办法在该缓冲区上自动启用compilation-minor-mode
?
我有一个Emacs扩展程序,它创建了一个名为*erl-output*
的缓冲区。默认情况下,此缓冲区仅使用fundamental-mode
。是否有办法在该缓冲区上自动启用compilation-minor-mode
?
为了自动切换主要模式,您可以将以下内容添加到您的 .emacs 文件中:
(add-to-list 'auto-mode-alist '("^\\*erl-output\\*$" . my-major-mode))
这对你不起作用;它是用于选择主要模式,而你需要选择次要模式。
相反,你可以尝试使用Hook。手册上说:
钩子是一个Lisp变量,它保存了一些函数列表,在某些明确定义的场合被调用。
所以你应该能够编写一个在需要时设置次要模式的函数。查看标准钩子列表,我认为你应该尝试使用temp-buffer-setup-hook
或temp-buffer-show-hook
。
你将不得不编写一个检查缓冲区名称并在需要时设置模式的函数,并在你的.emacs
中使用以下类似内容将其添加到钩子中:
(add-hook 'temp-buffer-setup-hook 'my-func-to-set-mode)
(add-to-list 'auto-mode-alist '("^\\*erl-output\\*$" . compilation-mode))
但是它并没有使用compilation-mode
创建。如果我手动创建一个缓冲区,使用(get-buffer-create "*erl-output*")
,模式仍然没有被设置。 - Adam Lindbergauto-mode-alist
中的名称模式适用于文件名,而不是缓冲区名称。因此,即使在此处需要一个主要模式,所提出的解决方案也无法帮助。 - glucas既然您的扩展程序正在创建缓冲区,为什么不直接添加:
(compilation-mode)
如果你真的坚持要使用次要模式,可以在创建*erl-output*
缓冲区的代码中使用(compilation-minor-mode)
。你可以编辑该模式的源代码或在创建程序周围使用建议...
compile.el
,但没有找到有用的内容。 - Adam Lindbergcompilation-minor-mode
?为什么不用主模式呢? - Trey Jackson