前セクションのいずれかの関数を使用してウィンドウを明示的にリサイズしたり、たとえば隣接するウィンドウのリサイズ時、ウィンドウの分割や削除(ウィンドウの分割とsee ウィンドウの削除を参照)、あるいはそのウィンドウのフレームをリサイズ(フレームのサイズを参照)する際に暗黙的にリサイズできます。
同一フレーム上に1つ以上のリサイズ可能なウィンドウが他に存在する際には、特定のウィンドウにたいして暗黙のリサイズを避けることが可能です。この目的にたいして、Emacsにそのウィンドウのサイズの予約(preserve)をアドバイスしなければなりません。これを行うための基本的な方法が2つあります。
このバッファーローカル変数が非nil
なら、通常はそのバッファーを表示するすべてのウィンドウのサイズが変更できなくなる。ウィンドウ削除やそのフレームのサイズ変更により、それ以外に方法がなければ依然としてウィンドウのサイズは変更され得る。
値がheight
ならそのウィンドウの高さのみ、値がwidth
ならそのウィンドウの幅のみが固定される。その他の非nil
値では幅と高さの両方が固定される。
この変数がnil
でも、そのバッファーを表示している任意のウィンドウを任意の方向にリサイズできるとはいえない。これを判断するには関数window-resizable
を使用する。ウィンドウのリサイズを参照のこと。
影響を受けるウィンドウにたいする明示的なリサイズや分割の試みも同様に抑制するので、window-size-fixed
の積極性が過度な場合が多々あります。これはたとえそのウィンドウが暗黙にリサイズされた後にも、たとえば隣接するウィンドウの削除やウィンドウのフレームのリサイズの際に発生するかもしれません。以下の関数では、そのようなウィンドウのリサイズを絶対禁止としないよう試みます:
この関数は将来のリサイズ操作用にウィンドウwindowの高さを予約済み(preserved)としてマーク(または非マーク)する。windowは生きたウィンドウでなければならずデフォルトは選択されたウィンドウ。オプション引数horizontalが非nil
ならwindowの幅を予約済みとしてマーク(または非マーク)する。
オプション引数preserveがt
ならwindowボディーのカレントの高さまたは幅を予約することを意味する。windowの高さまたは幅はEmacsが他によい選択をもたないときのみ変更される。この関数により予約されたウィンドウにたいする高さや幅のリサイズは決してエラーをthrowしない。
preserveがnil
なら、この関数の以前の呼び出しにより誘発されたwindowにたいする任意の拘束を解除して、windowの高さまたは幅の予約を停止することを意味する。引数にwindowを与えてenlarge-window
、shrink-window
、fit-window-to-buffer
を呼び出すことによっても対応する高速を削除できる。
現在のことろwindow-preserve-size
は以下の関数から呼び出されています:
fit-window-to-buffer
この関数のオプション引数preserve-sizeが非nil
なら、この関数により確保されたサイズは予約される(ウィンドウのリサイズを参照)。
display-buffer
この関数のalist引数にpreserve-size
エントリーがあれば、この関数により生成されるウィンドウサイズは予約される(バッファーを表示するウィンドウの選択を参照)。
window-preserve-size
はウィンドウリサイズ関数から参照されるwindow-preserved-size
と呼ばれるウィンドウパラメーターをインストールします(ウィンドウのパラメーターを参照)。このパラメーターはウィンドウがwindow-preserve-size
が呼び出されたときと異なるバッファーを表示していたり、呼び出し以降にウィンドウのサイズが変化していたらウィンドウのリサイズを妨げません。
以下の関数は特定のウィンドウの高さが予約済みかどうかチェックするために使用できます:
この関数はウィンドウwindowの予約済み高さをピクセル単位でリターンする。windowは生きたウィンドウでなければならずデフォルトは選択されたウィンドウ。オプション引数horizontalが非nil
ならwindowの予約済み幅をリターンする。windowのサイズが予約されていなければnil
をリターンする。