変数after-load-functions
を使用することにより、Emacsがライブラリーをロードするたびにコードを実行させることができます:
このアブノーマルフック(abnormal hook)は、ファイルをロードした後に実行されます。フック内の各関数は1つの引数(ロードされたファイルの絶対ファイル名)で呼び出されます。
特定のライブラリーがロードされた後にコードを実行したい場合は、マクロwith-eval-after-load
を使用します:
このマクロはlibraryがロードされるたびに、ファイルlibraryのロードの最後でbodyが評価されるよう準備します。libraryがすでにロード済みの場合は、即座にbodyを評価します。
ファイル名libraryにディレクトリーや拡張子を与える必要はありません。通常は以下のようにファイル名だけを与えます:
(with-eval-after-load "edebug" (def-edebug-spec c-point t))
どのファイルが評価をトリガーできるか制限するには、ディレクトリーか拡張子、またはしの両方をlibraryに含めます。実際のファイル名(たとえばすべてのシンボリックリンク名は除外される)が、与えられた名前すべてにマッチするファイルだけが、マッチします。以下の例では、どこかのディレクトリー..../foo/bar
にあるmy_inst.elcやmy_inst.elc.gzは評価をトリガーしますが、my_inst.elは異なります。:
(with-eval-after-load "foo/bar/my_inst.elc" …)
libraryはフィーチャ(たとえばシンボル)でもよく、その場合(provide
library)
を呼び出す任意のファイルの最後にbodyが評価されます。
body内のエラーはロードをアンドゥしませんが、bodyの残りの実行を妨げます。
上手く設計されたLispプログラムは通常、eval-after-load
を使用するべきではありません。(外部からの使用を意図した)他のライブラリーで定義された変数を調べたりセットする必要がある場合、それは即座に行うことができます
−−−
そのライブラリーがロードされるのを待つ必要はありません。そのライブラリーで定義された関数を呼び出す必要がある場合は、そのライブラリーをロードすべきで、それにはrequire
(Named Featuresを参照)が適しています。