本節では、ウィンドウにバッファの別の部分を表示したり
別のバッファを表示するたびに、
Lispプログラムが動作する方法を述べます。
変更できる動作は3種類、ウィンドウをスクロールするとき、
ウィンドウでバッファを切り替えるとき、
ウィンドウサイズを変えるときです。
最初の2つの動作ではwindow-scroll-functions
を実行し、
3つ目はwindow-size-change-functions
を実行します。
これらのフックの模範的な使用例は遅延ロック(lazy-lock)モードの
実装の中にあります。
フォントロックのモードを参照してください。
この変数は、スクロールによりウィンドウを再表示するまえに Emacsが呼び出すべき関数のリストを保持する。 各関数はウィンドウと新たな表示開始位置の2つの引数で呼ばれるため、 これはノーマルフックではない。
ウィンドウに別のバッファを表示する場合でも これらの関数が実行される。
これらの関数で
window-end
(see Window Start)を使うには 注意が必要である。 更新された値が必要なときには、確実に更新値を得るために 引数updateを使う必要がある。
この変数は、いかなる理由であれウィンドウサイズが変わるときに 呼び出される関数のリストを保持する。 関数は、再表示のたびにサイズ変更が起きたフレームごとに呼ばれる。
各関数はフレームを唯一の引数として受け取る。 当該フレームで大きさが変更されたウィンドウを探す直接的な方法や 正確な方法はない。 しかし、サイズ変更関数が呼ばれるたびに 既存のウィンドウとそれらの大きさを記録すれば、 現在の大きさと以前の大きさを比較できる。
ウィンドウを作成したり削除してもサイズ変更とみなすので、 これらの関数が呼び出される。 フレームの大きさが変わると既存のウィンドウの大きさも変わるので、 これもサイズ変更とみなす。
これらの関数で
save-window-excursion
(see Window Configurations)を使うのはよくない。 この関数はつねにサイズ変更とみなしこれらの関数を呼び出し、 これが繰り返されてしまうからである。 多くの場合、ここで必要なのはsave-selected-window
(see Selecting Windows)である。