Previous: , Up: Loading   [Contents][Index]


15.10 Hooks for Loading

変数after-load-functionsを使用することにより、Emacsがライブラリーをロードするたびにコードを実行させることができます:

Variable: after-load-functions

このアブノーマルフック(abnormal hook)は、ファイルをロードした後に実行されます。フック内の各関数は1つの引数(ロードされたファイルの絶対ファイル名)で呼び出されます。

特定のライブラリーがロードされた後にコードを実行したい場合は、マクロwith-eval-after-loadを使用します:

Macro: with-eval-after-load library body…

このマクロはlibraryがロードされるたびに、ファイルlibraryのロードの最後でbodyが評価されるよう準備します。libraryがすでにロード済みの場合は、即座にbodyを評価します。

ファイル名libraryにディレクトリーや拡張子を与える必要はありません。通常は以下のようにファイル名だけを与えます:

(with-eval-after-load "edebug" (def-edebug-spec c-point t))

どのファイルが評価をトリガーできるか制限するには、ディレクトリーか拡張子、またはしの両方をlibraryに含めます。実際のファイル名(たとえばすべてのシンボリックリンク名は除外される)が、与えられた名前すべてにマッチするファイルだけが、マッチします。以下の例では、どこかのディレクトリー..../foo/barにあるmy_inst.elcmy_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を参照)が適しています。