在 Emacs 中,如何根据缓冲区名称自动启用次要模式?
Posted
技术标签:
【中文标题】在 Emacs 中,如何根据缓冲区名称自动启用次要模式?【英文标题】:In Emacs, how to automatically enable a minor mode based on buffer name? 【发布时间】:2009-08-19 11:05:50 【问题描述】:我有一个 Emacs 扩展,它创建了一个名为 *erl-output*
的缓冲区。默认情况下,此缓冲区仅使用 fundamental-mode
创建。有什么方法可以在该缓冲区上自动启用compilation-minor-mode
?
【问题讨论】:
我查看了compile.el
,但没有发现任何有用的东西。
为什么要compilation-minor-mode
?为什么不是主模式?
只是我的扩展名与"Enable compilation-minor-mode to be able to click the links"
类似。我会看看使用compilation-mode
【参考方案1】:
要自动更改主要模式,您可以将以下内容添加到您的 .emacs 文件中:
(add-to-list 'auto-mode-alist '("^\\*erl-output\\*$" . my-major-mode))
这对你不起作用;它用于major 模式选择,而您在minor 模式选择之后。
您可以尝试使用Hook。手册说:
钩子是一个 Lisp 变量,它包含一个函数列表,在某些明确定义的场合被调用。
因此,您应该能够编写一个在需要时设置次要模式的函数。看着List of Standard Hooks,我想你应该试试temp-buffer-setup-hook
or temp-buffer-show-hook
。
您必须编写一个函数来检查缓冲区名称并在需要时设置模式,并在您的.emacs
中使用以下内容将其添加到钩子中:
(add-hook 'temp-buffer-setup-hook 'my-func-to-set-mode)
【讨论】:
是的,这正是我遇到的问题。 :-) @Adam - 我已经更新了我的答案以涵盖 Hooks 以及 auto-mode-alist;希望它们对你有用。 我尝试启用主模式但没有成功。在 .emacs 中我输入:(add-to-list 'auto-mode-alist '("^\\*erl-output\\*$" . compilation-mode))
它不是用compilation-mode
创建的。如果我使用 `(get-buffer-create "erl-output") 手动创建缓冲区,模式仍然没有设置
终于让它工作了,但我必须维护原始包的补丁。我已通知作者将它们包括在内。感谢您的帮助!
auto-mode-alist
中的名称模式应用于文件名,而不是缓冲区名。因此,即使这里需要一个主要模式,建议的解决方案也无济于事。【参考方案2】:
既然您的扩展程序正在创建缓冲区,为什么不直接添加:
(compilation-mode)
(或 (compilation-minor-mode)
,如果你真的设置了次要模式的想法)在创建 *erl-output*
缓冲区的代码中。您可以编辑模式的源代码,或使用有关创建例程的建议...
【讨论】:
compilation-mode
似乎使缓冲区只读。扩展偶尔会写入缓冲区。以上是关于在 Emacs 中,如何根据缓冲区名称自动启用次要模式?的主要内容,如果未能解决你的问题,请参考以下文章