我想更快地加载emacs init文件,所以我使用了“eval-after- load”。
例如,当我加载clojure文件时,我只是将
(eval-after-load 'clojure-mode
'do-something)它起作用了。
但当我尝试的时候
(eval-after-load 'emacs-lisp-mode
'do-something)它不起作用。我想知道emacs-lisp的正确的主要模式名称。
谢谢。
发布于 2013-10-01 22:35:51
请阅读documentation of eval-after-load
加载后求值库表单
此函数安排在每次加载文件库时,在加载文件库结束时计算表单。如果库已经加载,它会立即计算form。别忘了引用表格!
…库也可以是一个特征(例如,一个符号),在这种情况下,在调用(provide LIBRARY)的任何文件的末尾都会计算form。
您必须传递定义主模式的文件或库的名称作为参数。
虽然有些模式是在同名文件中定义的(例如clojure-mode.el中的clojure-mode ),但许多文件有不同的名称,特别是在实际定义多个主模式的情况下。
emacs-lisp-mode是在lisp-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))。它允许多个表单,并且不需要引用。
发布于 2013-10-01 22:18:37
只需用M-:对变量major-mode求值即可。它实际上是emacs-lisp-mode。请注意,*scratch*实际上是在lisp-interaction-mode中。
至于你想要做什么,使用(eval-after-load "lisp-mode")。
发布于 2013-10-02 09:14:49
正如@lunaryom所解释的那样,传递给eval-after-load的arg不是一个函数名,而是一个特性名,它基本上是一个文件名。因此,您需要找到从中加载函数的文件的名称。我们可以提供像eval-after-defun这样的功能,实际上这样做可能是一个好主意。如果你想要这样的东西,可以通过M-x report-emacs-bug请求。
https://stackoverflow.com/questions/19118343
复制相似问题