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

问题描述 投票:0回答:3

我有一个 Emacs 扩展,它创建了一个名为

*erl-output*
的缓冲区。默认情况下,此缓冲区仅使用
fundamental-mode
创建。有没有办法在该缓冲区上自动启用
compilation-minor-mode

emacs
3个回答
21
投票

要自动更改主要模式,您可以将以下内容添加到 .emacs 文件中:

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

这对你不起作用;它用于 major 模式选择,而您正在选择 minor 模式。

您可以尝试使用Hook。 说明书上写着:

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

因此您应该能够编写一个在需要时设置次要模式的函数。 看看标准挂钩列表我认为你应该尝试

temp-buffer-setup-hook
temp-buffer-show-hook

您必须编写一个函数来检查缓冲区名称并根据需要设置模式,然后在您的

.emacs
中使用类似以下内容将其添加到钩子中:

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

4
投票

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

(compilation-mode)

(或者

(compilation-minor-mode)
,如果您确实选择了次要模式想法)在创建
*erl-output*
缓冲区的代码中。 您可以编辑模式的源代码,或使用有关创建例程的建议...


0
投票

一个相关的案例,缓冲区是从文件创建的。例如,创建results.compile.log等文件的构建系统,您可以添加新的主要模式,

(define-derived-mode compile-log-mode fundamental-mode
  "CompilateLog"
  (compilation-minor-mode))

然后用类似的东西更新“auto-mode-alist”

(add-to-list 'auto-mode-alist '(\\.compile\\.log\\'" . compile-log-mode)
© www.soinside.com 2019 - 2024. All rights reserved.