Previous: Window Configurations, Up: Windows


27.17 ウィンドウのスクロールとサイズ変更向けのフック

本節では、ウィンドウにバッファの別の部分を表示したり 別のバッファを表示するたびに、 Lispプログラムが動作する方法を述べます。 変更できる動作は3種類、ウィンドウをスクロールするとき、 ウィンドウでバッファを切り替えるとき、 ウィンドウサイズを変えるときです。 最初の2つの動作ではwindow-scroll-functionsを実行し、 3つ目はwindow-size-change-functionsを実行します。 これらのフックの模範的な使用例は遅延ロック(lazy-lock)モードの 実装の中にあります。 フォントロックのモードを参照してください。

— Variable: window-scroll-functions

この変数は、スクロールによりウィンドウを再表示するまえに Emacsが呼び出すべき関数のリストを保持する。 各関数はウィンドウと新たな表示開始位置の2つの引数で呼ばれるため、 これはノーマルフックではない。

ウィンドウに別のバッファを表示する場合でも これらの関数が実行される。

これらの関数でwindow-end(see Window Start)を使うには 注意が必要である。 更新された値が必要なときには、確実に更新値を得るために 引数updateを使う必要がある。

— Variable: window-size-change-functions

この変数は、いかなる理由であれウィンドウサイズが変わるときに 呼び出される関数のリストを保持する。 関数は、再表示のたびにサイズ変更が起きたフレームごとに呼ばれる。

各関数はフレームを唯一の引数として受け取る。 当該フレームで大きさが変更されたウィンドウを探す直接的な方法や 正確な方法はない。 しかし、サイズ変更関数が呼ばれるたびに 既存のウィンドウとそれらの大きさを記録すれば、 現在の大きさと以前の大きさを比較できる。

ウィンドウを作成したり削除してもサイズ変更とみなすので、 これらの関数が呼び出される。 フレームの大きさが変わると既存のウィンドウの大きさも変わるので、 これもサイズ変更とみなす。

これらの関数でsave-window-excursion (see Window Configurations)を使うのはよくない。 この関数はつねにサイズ変更とみなしこれらの関数を呼び出し、 これが繰り返されてしまうからである。 多くの場合、ここで必要なのはsave-selected-window (see Selecting Windows)である。

— Variable: redisplay-end-trigger-functions

このアブノーマルフックは、ウィンドウの再表示において、 指定された終了トリガ位置を超えて伸びるテキストを使うたびに実行される。 終了トリガ位置は関数set-window-redisplay-end-triggerで設定する。 フック関数は2つの引数、ウィンドウと終了トリガ位置で呼ばれる。 終了トリガ位置としてnilを保存するとこの機能をオフにし、 フックを実行直後にトリガ値は自動的にnilに再設定される。

— Function: set-window-redisplay-end-trigger window position

この関数は、windowの終了トリガ位置をpositionとする。

— Function: window-redisplay-end-trigger window

この関数は、windowの現在の終了トリガ位置を返す。

— Variable: window-configuration-change-hook

このノーマルフックは、 既存のフレームのウィンドウの構成を変更するたびに呼び出される。 これには、ウィンドウの分割や削除、ウィンドウサイズの変更、 ウィンドウに別のバッファを表示することが含まれる。 このフックを実行するときには、 ウィンドウの構成が変更されたフレームが選択されているフレームである。