Что такое "с-eval-after-load" в Emacs Lisp

Я столкнулся с макросом with-eval-after-load при попытке установить persp-mode из здесь. Но я не могу найти макрос внутри Emacs и/или в Google. Где это определено? Является ли он частью стандартного Emacs Lisp?

Ответы

Ответ 1

От 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 был выпущен 20 октября 2014 года.

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))