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


23.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’なら、値は関数のリストではなく単一の関数です。そのような単一関数フック(single function hook)add-hookを使用して変更できず、かわりにadd-functionを使う必要があります(Advising Functionsを参照)。