emacs-lisp 的主要模式名称



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

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

它有效。
但是当我尝试时

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

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

请阅读eval-after-load的文档:

加载后评估库表单

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

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

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

虽然某些模式是在同名文件中定义的(例如 clojure-modeclojure-mode.el 中(,许多文件的名称不同,特别是如果实际上定义了多个主要模式。

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

因此,请使用 (eval-after-load 'lisp-mode … (

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

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

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

至于您要做什么,请使用 (eval-after-load "lisp-mode") .

正如@lunaryom所解释的,传递给eval-after-load的arg不是函数名称,而是功能名称,它基本上是一个文件名。 因此,您需要找到从中加载函数的文件的名称。我们可以提供像 eval-after-defun 这样的功能,确实这样做可能是个好主意。 如果您想要这样的东西,请通过 M-x report-emacs-bug 索取。

相关内容

  • 没有找到相关文章

最新更新