Next: , Up: Modes   [Contents][Index]


22.1 Hooks

フック(hook)とは、既存のプログラムから特定のタイミングで呼び出される関数(複数可)を格納することができる変数のことです。Emacsはカスタマイズ用にフックを提供します。ほとんどの場合は、initファイル内(Init Fileを参照)でフックをセットアップしますが、Lispプログラムもフックをセットできます。標準的なフック変数のリストは、Standard Hooksを参照してください。

Emacsのほとんどのフックは、ノーマルフック(normal hooks)です。これらの変数は、引数なしで呼び出される、関数のリストを含んでいます。慣習により、フック名が‘-hook’で終わるフックは、そのフックがノーマルフックであることを意味します。わたしたちは、一貫した方法でフックを使用できるよう、すべてのフックが可能な限りノーマルフックとなるよう努力しています。

すべてのメジャーモードコマンドは、初期化の最終ステップの1つとして、モードフック(mode hook)と呼ばれるノーマルフックを実行するとみなされます。これにより、そのモードによりすでに作成されたバッファーローカル変数割り当てをオーバーライドすることにより、ユーザーがそのモードの動作をカスタマイズするのが簡単になります。ほとんどのマイナーモード関数も、最後にモードフックを実行します。しかし、フックは他のコンテキストでも使用されます。たとえばフックsuspend-hookは、Emacsが自身をサスペンド(Suspending Emacsを参照)する直前に実行されます。

フックにフック関数を追加するには、add-hook(Setting Hooksを参照)を呼び出す方法が推奨です。フック関数は、funcall(What Is a Functionを参照)が受け入れる任意の種類の関数を指定できます。ほとんどのフック変数の初期値はvoidです。add-hookは、これを扱う方法を知っています。add-hookにより、グローバルフック、またはバッファーローカルフックのどちらを追加することも可能です。

フック変数の名前が‘-hook’で終わらない場合は、それが恐らくアブノーマルフック(abnormal hook)であることを示しています。こええは、フック関数が引数とともに呼ぶ出されること、または何らかの方法により、そのリターン値が使用されることを意味します。その関数の呼び出し方は、フックのドキュメントに記載されています。アブノーマルフックとして関数を追加するためにadd-hookを使用できますが、その関数はフック呼び出しの慣習にしたがって記述しななければなりません。慣習により、アブノーマルフックの名前は‘-functions’で終わります。

変数の名前が‘-function’で終わる場合、その値は関数のリストではなく単一の関数です。add-hookを、単一関数フックのように修正して使用することはできないので、かわりにadd-functionを使用します(Advising Functionsを参照)。