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

24.1 フック

フックとは、既存のプログラムが特定のタイミングで呼び出すための関数(関数とは何か?を参照)を格納できる変数のことです。Emacsでは、カスタマイズを目的としてフックが提供されています。多くの場合、フックはinitファイル(initファイルを参照)で設定されますが、Lispプログラムで設定することも可能です。標準的なフック変数の一覧については、標準フックを参照してください。

Emacsのフックの多くはノーマルフックです。これらの変数には、引数なしで呼び出される関数のリストが格納されています。慣習として、フック名が‘-hook’で終わる場合は、それがノーマルフックであることを示しています。すべてのフックを可能な限りノーマルフックにすることで、統一的な方法で利用できるようにしています。

すべてのメジャーモードコマンドは、初期化の最終段階の一つとして、モードフックと呼ばれる通常のフックを実行することになっています。これにより、ユーザーはモードによって既に行われたバッファローカル変数への代入をオーバーライドすることで、モードの動作を簡単にカスタマイズできます。ほとんどのマイナーモード関数も、最後にモードフックを実行します。しかし、フックは他のコンテキストでも使用されます。例えば、フック suspend-hook は、Emacs がサスペンドする直前に実行されます(Emacs のサスペンドを参照)。

フック変数の名前が ‘-hook’ で終わっていない場合、それはおそらく 異常フック であることを示しています。これらは通常のフックとは2つの点で異なります。1つ以上の引数を指定して呼び出せる点と、戻り値を何らかの形で利用できる点です。フックのドキュメントには、関数の呼び出し方法や戻り値の利用方法が記載されています。異常フックに追加される関数は、必ずそのフックの呼び出し規約に従わなければなりません。慣習として、異常フックの名前は ‘-functions’ で終わります。

変数名が ‘-predicate’ または ‘-function’(単数形)で終わる場合、その値は関数リストではなく関数である必要があります。異常なフックと同様に、こうした 単一関数フック では、想定される引数や戻り値の意味が異なります。詳細は各変数の docstring で説明されています。

フック(マルチ関数およびシングル関数の両方)は変数であるため、その値は setq で変更したり、let で一時的に変更したりできます。しかし、フックが持つ他の関数を保持したまま、特定の関数を追加または削除したい場合が多くあります。マルチ関数フックの場合、推奨される方法は add-hook と remove-hook を使用することです(フックの設定 を参照)。ほとんどの通常のフック変数は初期状態で void であり、add-hook がこれを適切に処理します。フックは、add-hook を使用してグローバルに、あるいはバッファローカルに追加できます。シングル関数のみを保持するフックの場合、add-hook は適しませんが、add-function (Emacs Lisp 関数へのアドバイジング を参照)を使用して、新しい関数をフックに組み込むことができます。なお、一部のシングル関数フックは nil であり、add-function では処理できないため、add-function を呼び出す前にその点を確認する必要があります。