我有一个 Emacs 扩展,它创建了一个名为
*erl-output*
的缓冲区。默认情况下,此缓冲区仅使用 fundamental-mode
创建。有没有办法在该缓冲区上自动启用 compilation-minor-mode
?
要自动更改主要模式,您可以将以下内容添加到 .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)
既然您的扩展正在创建缓冲区,为什么不直接添加:
(compilation-mode)
(或者
(compilation-minor-mode)
,如果您确实选择了次要模式想法)在创建 *erl-output*
缓冲区的代码中。 您可以编辑模式的源代码,或使用有关创建例程的建议...
一个相关的案例,缓冲区是从文件创建的。例如,创建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)