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


22.1 フック

フック(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を参照)。