ウィンドウのサイズ変更は、前節の関数のいずれかを用いて明示的に行うことができるほか、例えば隣接するウィンドウのサイズを変更する場合や、ウィンドウを分割・削除する場合(ウィンドウの分割、ウィンドウの削除を参照)、あるいはウィンドウのフレームのサイズを変更する場合(フレームサイズを参照)など、暗黙的に行うこともできます。
同一フレーム内にサイズ変更可能なウィンドウが他に1つ以上存在する場合、特定のウィンドウの暗黙的なサイズ変更を回避することが可能です。そのためには、Emacsにそのウィンドウのサイズを保持するよう指示する必要があります。これには2つの基本的な方法があります。
このバッファローカル変数が nil
以外の場合、通常はそのバッファを表示しているウィンドウのサイズを変更することはできません。他に手段がない場合は、ウィンドウを削除したりフレームのサイズを変更したりすることで、ウィンドウのサイズが変わることがあります。
値が height の場合はウィンドウの高さがのみ、width の場合はウィンドウの幅のみが固定されます。それ以外の nil 以外の値は、幅と高さの両方を固定します。
この変数が nil
であっても、バッファを表示しているウィンドウを任意の方向にリサイズできるとは限りません。それを判断するには、関数 window-resizable を使用してください。ウィンドウのリサイズ を参照してください。
多くの場合、window-size-fixed
は、影響を受けたウィンドウを明示的にリサイズしたり分割したりしようとするあらゆる試みまでも抑制してしまうため、過度に攻撃的になります。これは、例えば隣接するウィンドウを削除したり、ウィンドウのフレームをリサイズしたりするなど、ウィンドウが暗黙的にリサイズされた後でさえ起こり得ます。以下の関数は、このようなウィンドウの明示的なリサイズを決して妨げないよう最大限に努めています:
この関数は、ウィンドウ window
の高さを、今後のリサイズ操作のために保持するものとして(解除)マークします。window
はアクティブなウィンドウである必要があり、デフォルトでは選択中のウィンドウが指定されます。オプション引数 horizontal が nil 以外の場合、window の幅を保持するものとして(解除)マークします。
オプション引数 preserve が t
の場合、これは window のボディの現在の高さ/幅を保持することを意味します。window の高さ/幅は、Emacs
により良い選択肢がない場合にのみ変更されます。この関数によって高さ/幅が保持されるウィンドウのサイズ変更で、エラーが発生することはありません。
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 を返します。