我在尝试从here安装with-eval-after-load
时遇到了宏persp-mode
。但是我无法在Emacs和/或Google上找到宏。它在哪里定义?它是标准Emacs Lisp的一部分吗?
答案 0 :(得分:43)
来自etc/NEWS
:
* Lisp Changes in Emacs 24.4
...
** New macro `with-eval-after-load'.
This is like the old `eval-after-load', but better behaved.
Emacs 24.4于2014年10月20日发布。
eval-after-load
被认为是不正常的,因为它是一个函数,而不是宏,因此需要引用其中的代码,这意味着它不能进行字节编译。它也只接受一个表单,因此如果您有多个表单,则需要使用progn
。例如:
(eval-after-load "foo"
'(progn
(setq foo 42)
(setq bar 17)))
with-eval-after-load
的等效版本为:
(with-eval-after-load "foo"
(setq foo 42)
(setq bar 17))
正如Clément在评论中指出的那样,with-eval-after-load
的一个缺点是您不能依赖于相关模块中定义的宏,而使用eval-after-load
时,您可以确定宏已定义并可供使用。这是discussed on emacs-devel。