emacs-lisp的主要模式名称

时间:2013-10-01 14:05:56

标签: emacs clojure elisp major-mode eval-after-load

我想更快地加载emacs init文件,所以我使用'eval-after-load 例如,当我加载clojure文件时,我只是把

(eval-after-load 'clojure-mode
    'do-something)

有效。
但是当我尝试

(eval-after-load 'emacs-lisp-mode
    'do-something)

它不起作用。我想知道emacs-lisp的正确主要模式名称 感谢。

3 个答案:

答案 0 :(得分:4)

请阅读documentation of eval-after-load

  

eval-after-load LIBRARY表格

     

每次加载LIBRARY时,此函数都会安排在加载文件LIBRARY结束时评估表单。如果已加载LIBRARY,它会立即评估表单。不要忘记引用表格!

     

[...] LIBRARY也可以是一个特征(即符号),在这种情况下,形式在任何调用(provide LIBRARY)的文件的末尾进行评估。

您必须将定义主要模式的文件或库的名称作为参数传递。

虽然某些模式在同名文件中定义(例如clojure-mode中的clojure-mode.el),但许多文件名称不同,尤其是在实际定义多个主要模式时。

emacs-lisp-modelisp-mode.el中定义,以及其他一些用于Emacs Lisp编辑的模式(例如lisp-mode作为通用Lisp语言模式,或lisp-interaction-mode用于{{1}缓冲区)。

因此,请使用*scratch*

此外,您必须将单个sexp作为第二个参数,因此您可能希望使用(eval-after-load 'lisp-mode …来调用函数(eval-after-load 'lisp-mode '(do-something))

如果您使用的是Emacs的快照构建,请使用do-something,即with-eval-after-load。它允许多个表单,并且不需要引用。

答案 1 :(得分:2)

只需使用M-:变量major-mode进行评估。它实际上是emacs-lisp-mode。 请注意,*scratch*实际上位于lisp-interaction-mode

至于您要执行的操作,请使用(eval-after-load "lisp-mode")

答案 2 :(得分:2)

正如@lunaryom所解释的那样,传递给eval-after-load的arg不是函数名,而是一个特征名,它基本上是一个文件名。因此,您需要找到加载函数的文件的名称。 我们可以提供像eval-after-defun这样的功能,实际上这可能是个好主意。如果你想要这样的话,可以通过M-x report-emacs-bug来提出要求。