在Emacs中,如何根据缓冲区名称自动启用一个次要模式?

14

我有一个Emacs扩展程序,它创建了一个名为*erl-output*的缓冲区。默认情况下,此缓冲区仅使用fundamental-mode。是否有办法在该缓冲区上自动启用compilation-minor-mode


我查看了compile.el,但没有找到有用的内容。 - Adam Lindberg
2
你为什么想要使用compilation-minor-mode?为什么不用主模式呢? - Trey Jackson
我的扩展程序提示信息大致是:“启用编译次要模式以便能够点击链接”。我会尝试只使用“编译模式”。 - Adam Lindberg
2个回答

21

为了自动切换主要模式,您可以将以下内容添加到您的 .emacs 文件中:

(add-to-list 'auto-mode-alist '("^\\*erl-output\\*$" . my-major-mode))

这对你不起作用;它是用于选择主要模式,而你需要选择次要模式。

相反,你可以尝试使用Hook。手册上说:

钩子是一个Lisp变量,它保存了一些函数列表,在某些明确定义的场合被调用。

所以你应该能够编写一个在需要时设置次要模式的函数。查看标准钩子列表,我认为你应该尝试使用temp-buffer-setup-hooktemp-buffer-show-hook

你将不得不编写一个检查缓冲区名称并在需要时设置模式的函数,并在你的.emacs中使用以下类似内容将其添加到钩子中:

(add-hook 'temp-buffer-setup-hook 'my-func-to-set-mode)

是的,那正是我所遇到的问题。 :-) - Adam Lindberg
@Adam - 我已经更新了我的答案,涵盖了Hooks和auto-mode-alist; 希望它们对你有用。 - David Webb
我尝试启用主模式但没有成功。在.emacs文件中,我添加了以下代码: (add-to-list 'auto-mode-alist '("^\\*erl-output\\*$" . compilation-mode))但是它并没有使用compilation-mode创建。如果我手动创建一个缓冲区,使用(get-buffer-create "*erl-output*"),模式仍然没有被设置。 - Adam Lindberg
最终我成功让它工作了,但我必须对原始软件包进行补丁维护。我已经通知作者将其包含在内。感谢您的帮助! - Adam Lindberg
auto-mode-alist 中的名称模式适用于文件名,而不是缓冲区名称。因此,即使在此处需要一个主要模式,所提出的解决方案也无法帮助。 - glucas

4

既然您的扩展程序正在创建缓冲区,为什么不直接添加:

(compilation-mode)

如果你真的坚持要使用次要模式,可以在创建*erl-output*缓冲区的代码中使用(compilation-minor-mode)。你可以编辑该模式的源代码或在创建程序周围使用建议...


“compilation-mode” 似乎会使缓冲区只读。该扩展程序偶尔会向缓冲区写入内容。 - Adam Lindberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接