GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Hooks-for-Loading.html ・ emacs-doc.conao3.com

16.10 読み込み用フック

変数 after-load-functions を使用することで、Emacs がライブラリを読み込むたびに実行されるコードを指定できます:

変数: after-load-functions

この異常なフックは、ファイルの読み込み後に実行されます。フック内の各関数は、直前に読み込まれたファイルの絶対ファイル名という単一の引数で呼び出されます。

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

マクロ: with-eval-after-load library body…

このマクロは、libraryが読み込まれるたびに、ファイルlibraryの読み込み終了時にbodyを評価するように構成されています。libraryが既に読み込まれている場合は、直ちにbodyを評価します。

通常、libraryはフィーチャー(すなわちシンボル)であり、その場合、bodyは(provide library)が呼び出されている任意のファイルの末尾で評価されます。

library はファイル名(つまり文字列)としても指定できます。ファイル名 library にディレクトリや拡張子を指定する必要はありません。通常は、次のようにファイル名のみを指定します:

(with-eval-after-load "js" (keymap-set js-mode-map "C-c C-c" 'js-eval))

評価のトリガーとなるファイルを制限するには、ディレクトリ、拡張子、またはその両方を library に指定します。絶対ファイル名が指定されたすべての名前構成要素と一致するファイルのみが対象となります。以下の例では、あるディレクトリ ..../foo/bar 内の my_inst.elc または my_inst.elc.gz が評価をトリガーしますが、my_inst.el はトリガーされません:

(with-eval-after-load "foo/bar/my_inst.elc" ...)

body のエラーが発生してもロードは取り消されませんが、body の残りの実行は妨げられます。

通常、適切に設計されたLispプログラムではwith-eval-after-loadを使用すべきではありません。別のライブラリで定義された変数(外部利用を想定したもの)を調べたり設定したりする必要がある場合は、すぐに実行できます。ライブラリがロードされるまで待つ必要はありません。そのライブラリで定義された関数を呼び出す必要がある場合は、ライブラリをロードしてください。できればrequireを使用してロードしてください(Featuresを参照)。