如何在emacs启动时默认启用非全局次要模式?

时间:2013-04-16 22:24:13

标签: emacs mode

我想在每次启动emacs时启用rainbow-mode,而不是必须使用M-x rainbow-mode

我想我的.emacs文件中有一些命令。

我尝试了以下所有方法,但没有一个有效:

(require 'rainbow-mode)   

(rainbow-mode initialize)

(global-rainbow-mode)

更一般地说,如何在启动时自动加载任何模式/包?

1 个答案:

答案 0 :(得分:40)

rainbow-mode不是全局次要模式,因此需要在每个缓冲区的基础上启用它。

我只将它用于CSS,所以我有:

(add-hook 'css-mode-hook 'my-css-mode-hook)
(defun my-css-mode-hook ()
  (rainbow-mode 1))

如果您真的希望它在全球范围内,无处不在,您可以自己轻松定义全局次要模式:

(define-globalized-minor-mode my-global-rainbow-mode rainbow-mode
  (lambda () (rainbow-mode 1)))

(my-global-rainbow-mode 1)

您可以向(lambda () (rainbow-mode 1))函数添加任意逻辑(将在每个缓冲区中进行评估),以决定是否实际调用(rainbow-mode 1)给定缓冲区,因此如果您对elisp感到满意,那么您可以轻松扩展此方法以满足您对相关模式的特定要求。


  

更一般地说,如何在启动时自动加载任何模式/包?

它可能会有所不同,但我所展示的方法对于大多数次要模式都足够了:要么在启用MODE时启用它们(是某些特定的其他模式名称),在这种情况下您可以使用根据{{​​1}}示例,MODE-hook变量(始终可用);或者您希望永久启用模式,在这种情况下,全局次模式是一种很好的方法(因为您可以全局打开和关闭它)。默认情况下,某些次要模式是全局的(或提供全局变体),但根据css-mode-hook示例,您可以根据需要创建自己的模式。

另请注意,模式可以从其他模式派生,在这种情况下,将运行所有相关的my-global-rainbow-mode挂钩(有关详细信息,请参阅{{3 }})。一个常见的用例是使用MODE-hook来启用所有所需的编程模式所需的功能(这是大多数编程模式)。

请记住,许多(希望是大多数)库和包都会提供使用说明。如果找不到文档,请务必尝试 M-x prog-mode-hook访问库文件,然后阅读顶部的注释。通常有一个信息非常丰富的“评论”部分,有时这是最终用户文档的主要来源,并解释了如何启用其功能。