web-dev-qa-db-ja.com

EmacsLispの「with-eval-after-load」とは

私はマクロに出くわしましたwith-eval-after-loadインストールしようとしたときpersp-mode from ここ 。しかし、Emacs内やGoogleでマクロを見つけることができません。それはどこで定義されていますか?それは標準のEmacsLispの一部ですか?

27
Talespin_Kit

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.

Emacs24.4は2014年10月20日にリリースされました。

eval-after-loadは、マクロではなく関数であるため、動作が悪いと見なされます。したがって、内部のコードを引用符で囲む必要があります。つまり、バイトコンパイルできません。また、1つのフォームのみを受け入れるため、複数のフォームがある場合は、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の欠点の1つは、問題のモジュールで定義されたマクロに依存できないことですが、eval-after-loadを使用するとそのようなことが確実になります。マクロが定義され、使用できるようになっています。これは emacs-develで説明 でした。

45
legoscia