Previous: Running Hooks, Up: Hooks [Contents][Index]
以下はLisp Interactionモードのときにモードフックを使用してAuto Fillモードをオンに切り替える例です:
(add-hook 'lisp-interaction-mode-hook 'auto-fill-mode)
この関数はフック変数に関数functionを追加する手軽な方法である。ノーマルフックと同じようにアブノーマルフックにたいしてもこの関数を使用できる。functionには正しい数の引数を受け付ける任意のLisp関数を指定できる。たとえば、
(add-hook 'text-mode-hook 'my-text-hook-function)
はtext-mode-hook
と呼ばれるフックにmy-text-hook-function
を追加する。
hook内にfunctionがすでに存在する場合(比較にはequal
を使用)、add-hook
は2回目の追加を行わない。
functionのプロパティpermanent-local-hook
が非nil
ならkill-all-local-variables
(またはメジャーモードを変更しても)はそのフック変数のローカル値から関数を削除しない。
ノーマルフックにたいしてフック関数は実行される順序に無関係であるようにデザインされるべきである。順序への依存はトラブルを招く。とはいえその順序は予測可能である。functionは通常はフックリストの先頭に追加されるので、(他のadd-hook
呼び出しがなければ)それは最初に実行される。オプション引数appendが非nil
なら、新たなフック関数はフックリストの最後に追加されて、実行されるのも最後になる。
add-hook
はhookがvoidのとき、または値が単一の関数の場合には、値を関数リストにセットまたは変更してそれらを扱うことができる。
localが非nil
なら、グローバルフックリストではなくバッファーローカルフックリストにfunctionを追加する。これはフックをバッファーローカルにして、そのバッファーローカルな値にt
を追加する。バッファーローカルな値へのt
の追加は、ローカル値と同じようにデフォルト値でもフック関数を実行するためのフラグである。
この関数はフック変数hookからfunctionを削除する。これはequal
を使用してfunctionとhook要素を比較するので、その比較はシンボルとラムダ式の両方で機能する。
localが非nil
なら、それはグローバルフックリストではなくバッファーローカルフックリストからfunctionを削除する。