在 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 中,如何根据缓冲区名称自动启用次要模式?的主要内容,如果未能解决你的问题,请参考以下文章

如何定义键绑定以在 emacs 中的次要模式之间切换?

emacs 中的术语 :: 如何关闭“自动换行”

如何在emacs中自动关闭自动加密模式缓冲区?

运行 emacs 时将自动填充模式作为次要模式打开

启动make并通过Emacs中的快捷方式转到错误位置

如何从 Emacs 中的次要模式键盘映射中删除键?