フックは、フック関数もしくはフック関数のリストを参照する変数です。
フック変数を用いる理由は、フックを用いて参照される関数は、ユーザーもしくは他の 関数から変更しうるという点にあります。フックはしばしばメジャーモードやマイナー モードと関係付けられ、ユーザーがそのモードの動作をカスタマイズできるようになっ ています。例えば、find-file-not-found-hooks で名指される関数は find-file で ファイルが見つからない場合 (常に) 呼ばれます。
通常、モードがそれに対するフック変数を持つ場合、そのフックはそのモードの初期化 の後走ります。このように、(例えばバッファローカル変数の初期値を変えることで)そ のモードの動きを変更するコードをフック関数の中に入れることができます。以下の例 は c-mode と c++-mode 用のフックの定義方法を示しています。フック関数は、関数の 名前もしくは anonymous lambda 式でありうる点に注意して下さい。
(setq c-mode-hook '(lambda () (setq c-indent-level 4 c-argdecl-indent 0
c-label-offset -4 c-continued-statement-indent 0 c-brace-offset 0 comment-column 40 ))) (setq c++-mode-hook c-mode-hook)
(lisp 関数と primitive に対しフックを追加することについて論ずること!!)
Function: run-hooks &rest hooklist
この関数は、アーギュメントとしてフックの名前をいくつか受け取り、その各々を 順に走らせます。メジャーモード関数は、ユーザーによって定義されたフックを呼 び出すのに、これを用いることがあります。 hooklist アーギュメントの各々は フック変数であるシンボルでなくてはいけません。このアーギュメントは指定され た順に処理されます。
フック変数が non-nil の値を持つ場合、その値は関数もしくは関数のリストで す。値が関数の場合、それを呼びます。リストの場合、要素である関数を順に呼び ます。フック関数は(全て)アーギュメントを持たずに呼ばれます。
(run-hooks 'c-mode-hook)
フックのリストに関しては補足を参照して下さい。