Next: Selecting Windows, Previous: Deleting Windows, Up: Windows [Contents][Index]
ウィンドウWの最後の兄弟を削除したときは、ウィンドウツリー内の親ウィンドウをWを置き換えることにより、その親ウィンドウも削除されます。これは、新たなウィンドウコンビネーションを形成するために、Wがその親の兄弟たちと再結合されなければならないことを意味します。生きたウィンドウを削除することにより、必然的に2つの内部ウィンドウが削除されるかもしれない場合もあります。
______________________________________ | ______ ____________________________ | || || __________________________ || || ||| ___________ ___________ ||| || |||| || |||| || ||||____W6_____||_____W7____|||| || |||____________W4____________||| || || __________________________ || || ||| ||| || ||| ||| || |||____________W5____________||| ||__W2__||_____________W3_____________ | |__________________W1__________________|
この構成におけるW5の削除は、通常はW3とW4の削除を引き起こします。残りの生きたウィンドウW2、W6、W7は親をW7とする水平コンビネーションを形成するために再結合されます。
しかし、ときにはW4のような親ウィンドウを削除しないほうが合理的な場合もあります。特に、親ウィンドウが同じタイプのコンビネーション内に埋め込まれるコンビネーションを保護するために使用されるときは、それを削除するべきではありません。そのような埋め込みは、あるウィンドウを分割した後に続けて新たなウィンドウを削除する際、Emacsが関連するフレームで分割前にあったレイアウトを確実に再確立するために意味があります。
親がW1であるような2つの生きたウィンドウW2とW3を開始点とするシナリオを考えてみましょう。
______________________________________ | ____________________________________ | || || || || || || || || || || || || ||_________________W2_________________|| | ____________________________________ | || || || || ||_________________W3_________________|| |__________________W1__________________|
W2を分割すると、以下のようにウィンドウW4が新たに作成されます。
______________________________________ | ____________________________________ | || || || || ||_________________W2_________________|| | ____________________________________ | || || || || ||_________________W4_________________|| | ____________________________________ | || || || || ||_________________W3_________________|| |__________________W1__________________|
ここでウィンドウを垂直方向に拡大すると、Emacsはもしそのようなウィンドウがあれば、下位の兄弟ウィンドウから対応するスペースを得ようと試みます。このシナリオでふぁW4の拡大により、W3からスペースが奪われます。
______________________________________ | ____________________________________ | || || || || ||_________________W2_________________|| | ____________________________________ | || || || || || || || || ||_________________W4_________________|| | ____________________________________ | ||_________________W3_________________|| |__________________W1__________________|
W4を削除すると、前にW3から奪ったスペースを含む、スペース全体がW2に与えられるでしょう。
______________________________________ | ____________________________________ | || || || || || || || || || || || || || || || || ||_________________W2_________________|| | ____________________________________ | ||_________________W3_________________|| |__________________W1__________________|
これは特にW4が一時的にバッファーを表示するために使用されていて(Temporary Displaysを参照)、かつ初期のレイアウトで作業を継続したい場合は直感に反するかもしれません。
この振る舞いは、W2を分割する際に、新たな親ウィンドウを作成することにより解決できます。
この変数は、ウィンドウ分割により新たに親ウィンドウを作成させるかどうかを制御する。以下の値が認識される:
nil
これは、既存のウィンドウコンビネーションと同じ方向で分割が発生した場合(これ以外の場合は、いずれにせよ内部ウィンドウが新たに作成される)は、既存の親ウィンドウが存在するならば、新たな生きたウィンドウがそれを共有できることを意味する。
window-size
この場合、display-buffer
はalist引数内のエントリーwindow-height
またはwindow-width
に親ウィンドウが渡されるなら、新たに親ウィンドウを作成する(Display Action Functionsを参照)。
temp-buffer
この値は、一時的なバッファーを表示するウィンドウの分割に際し、新たに親ウィンドウを作成する。
display-buffer
これは、display-buffer
(Choosing Windowを参照)がウィンドウを分割する際に、常に親ウィンドウを新たに作成することを意味する。
t
この場合は、ウィンドウを分割する際、常に親ウィンドウが新たに作成される。したがって、この変数の値が常にt
の場合は、すべてのウィンドウツリーm常に2分木(ルートウィンドウ以外のすべてのウィンドウが正確に1つの兄弟をもつようなツリー)になる。
デフォルトはnil
で、これら以外の値は将来のために予約済みである。
この返信のセッティングの結果としてsplit-window
が新たに親ウィンドウを作成した場合は、新たに作成された内部ウィンドウにたいしてset-window-combination-limit
(以下参照)も呼び出す。これは、子ウィンドウが削除された際の、ウィンドウツリーの再配置に影響する(以下参照)。
window-combination-limit
がt
の場合、このシナリオの初期構成では以下のようになるでしょう:
______________________________________ | ____________________________________ | || __________________________________ || ||| ||| |||________________W2________________||| || __________________________________ || ||| ||| |||________________W4________________||| ||_________________W5_________________|| | ____________________________________ | || || || || ||_________________W3_________________|| |__________________W1__________________|
子としてW2および新たな生きたウィンドウをもつ内部ウィンドウW5が新たに作成されます。ここでW2はW4の唯一の兄弟なので、W4を拡大するとW3は変更せずに、W2を縮小しようと試みるでしょう。W5は垂直コンビネーションW1に埋め込まれた、2つのウィンドウからなる垂直コンビネーションを表すことに注意してください。
この関数は、ウィンドウwindowのコンビネーションリミット(combination limit:
結合限界をlimitにセットする。この値は、関数window-combination-limit
を通じて取得できる。効果については以下を参照のこと。これは内部ウィンドウにたいしてのみ意味をもつことに注意されたい。split-window
は、呼び出された際に変数window-combination-limit
がt
ならば、t
をlimitとして、この関数を呼び出す。
この関数は、windowにたいするコンビネーションリミットをリターンする。
コンビネーションリミットは、内部ウィンドウにたいしてのみ意味をもつ。これがnil
の場合は、Emacsはウィンドウ削除に応じて、兄弟同士で新たなウィンドウコンビネーションを形成することにより、windowの子ウィンドウをグループ化するために、windowの自動的な削除を許す。コンビネーションリミットがt
の場合、windowの子ウィンドウは、その兄弟と自動的に再結合されることは決してない。
このセクションの冒頭で示した構成の場合、W4(W6とW7の親ウィンドウ)のコンビネーションリミットはt
なので、t
を削除しても暗黙でW4も削除されることはない。
かわりに、同じ構成内の中の1つのウィンドウが分割または削除されたときは常に構成内のすべてのウィンドウをリサイズすることにより、上記で示した問題を避けることができます。これは、そのような操作にたいして、この方法以外では小さすぎるようなウィンドウの分割も可能にします。
この変数がnil
の場合、split-window
はウィンドウ(以下window)自身と新たなウィンドウの両方にたいして、windowのスクリーンエリアが十分大きい場合のみ、windowを分割できる。
この変数がt
の場合、split-window
は新たなウィンドウに対応するため、windowと同じコンビネーション内の、すべてのウィンドウのリサイズを試みる。これは特に、windowが固定サイズウィンドウのときや、通常の分割には小さすぎるときも、split-window
をが成功することを許す。さらに、続けてwindowをリサイズ、または削除すると、そのコンビネーション内のその他すべてのウィンドウをリサイズする。
デフォルトはnil
で、それ以外の値は、将来の使用のため予約済みである。この変数の値は、window-combination-limit
が非nil
の場合は無視される。
window-combination-resize
の効果を説明するために、以下のフレームレイアウトを考えてください。
______________________________________ | ____________________________________ | || || || || || || || || ||_________________W2_________________|| | ____________________________________ | || || || || || || || || ||_________________W3_________________|| |__________________W1__________________|
window-combination-resize
がnil
の場合、ウィンドウW3を分割しても、W2のサイズは変更されません:
______________________________________ | ____________________________________ | || || || || || || || || ||_________________W2_________________|| | ____________________________________ | || || ||_________________W3_________________|| | ____________________________________ | || || ||_________________W4_________________|| |__________________W1__________________|
window-combination-resize
がt
の場合は、W3を分割すると3つの生きたウィンドウすべてを、おおよそ同じ高さにします:
______________________________________ | ____________________________________ | || || || || ||_________________W2_________________|| | ____________________________________ | || || || || ||_________________W3_________________|| | ____________________________________ | || || || || ||_________________W4_________________|| |__________________W1__________________|
生きたウィンドウW2、W3、W4のいずれを削除しても、削除されたウィンドウのスペースは、残りの2つの生きたウィンドウに相対的に分配されます。