Next: , Previous: , Up: Windows   [Contents][Index]


27.5 Splitting Windows

このセクションでは、既存のウィンドウを分割(split: スプリットすることにより、新たにウィンドウを作成する関数について説明します。

Function: split-window &optional window size side pixelwise

この関数は、ウィンドウwindowの隣に、新たに生きたウィンドウを作成する。windowが省略またはnilの場合のデフォルトは、選択されたウィンドウである。そのウィンドウは“分割(split)”されて、サイズは縮小される。そのスペースは、リターンされる新たなウィンドウにより吸収される。

オプションの第2引数sizeは、windowおよび/または新たなウィンドウのサイズを決定する。これが省略またはnilの場合は、両方のウィンドウに同じサイズが割り当てられる。行数が奇数の場合、余りの1行は新たなウィンドウに割り当てられる。sizeが正の数値の場合、windowsizeの行数(sideの値によっては列数)が与えられる。sizeが負の数値の場合、新たなウィンドウに-sizeの行数(または列数)が与えられる。

sizenilの場合、この関数は変数window-min-heightwindow-min-widthにしたがう(Window Sizesを参照)。つまり、分割によりこれらの変数の指定より小さいウィンドウが作成されるようなときは、エラーをシグナルする。しかし、sizeにたいして非nil値を指定すれば、これらの変数は無視される。その場合、許容される最小のウィンドウは、テキストエリアの高さが1行、および/または幅が2列のウィンドウであるとされる。

したがって、sizeが指定された場合、生成されるウィンドウがモードラインやスクロールバー等すべてのエリアを含むのに十分な大きさがあるかどうかチェックするのは、呼び出し側の責任である。これに関して、必要最小限のwindowを決定するために、関数window-min-size(Window Sizesを参照)を使用できる。新たなウィンドウは通常、モードラインやスクロールバー等のエリアをwindowから“継承”するので、この関数は新たなウィンドウの最小サイズも良好に推定する。呼び出し側は、次回の再表示前にこれに応じて継承されたエリアを削除する場合のみ、より小さなサイズを指定すること。

オプションの第3引数sideは、新たなウィンドウの位置をwindowから相対的に指定する。nilまたはbelowの場合、新たなウィンドウはwindowの下に、aboveの場合はwindowの上に配される。どちらの場合も、sizeはウィンドウのトータル高さを行数で指定する。

sidetまたはrightの場合、新たなウィンドウはwindowの右に、sideleftの場合はwindowの左に配される。どちらの場合も、sizeはウィンドウのトータル幅を列数で指定する。

オプションの第4引数pixelwiseが非nilの場合は、sizeを行や列ではなくピクセル単位で解釈することを意味する。

windowが生きたウィンドウの場合、新たなウィンドウはマージンやスクロールバーを含む、さまざまなプロパティを継承する。windowが内部ウィンドウ(internal window)の場合、新たなウィンドウはwindowのフレームのプロパティを継承する。

変数ignore-window-parametersnilの場合に限り、この関数の挙動はwindowなパラメーターにより変更されるかもしれない。ウィンドウパラメーターsplit-windowの値がtの場合、この関数はその他すべてのウィンドウパラメーターを無視する。それ以外では、ウィンドウパラメーターsplit-windowの値が関数の場合は、split-windowの通常アクションのかわりに、引数windowsizesideでその関数が呼び出される。値が関数以外の場合、この関数は(もしあれば)ウィンドウパラメーターwindow-atomまたはwindow-sideにしたがう。Window Parametersを参照のこと。

例として、Windows and Framesで議論したウィンドウ構成(window configuration)を得るための、一連のsplit-window呼び出しを以下に挙げます。この例では、生きたウィンドウの分割と、内部ウィンドウの分割も示します。最初はW4で表される、単一のウィンドウ(生きたルートウィンドウ)を含むフレームから開始します。(split-window W4)を呼び出すことにより、以下のウィンドウ構成が得られます。

     ______________________________________
    | ____________________________________ |
    ||                                    ||
    ||                                    ||
    ||                                    ||
    ||_________________W4_________________||
    | ____________________________________ |
    ||                                    ||
    ||                                    ||
    ||                                    ||
    ||_________________W5_________________||
    |__________________W3__________________|

split-window呼び出しにより、W5で示す生きたウィンドウが新たに作成されました。W3で示される内部ウィンドウも新たに作成され、これはルートウィンドウかつW4W5の親ウィンドウになります。

次は、引数として内部ウィンドウW3を渡して、(split-window W3 nil 'left)を呼び出します。

     ______________________________________
    | ______  ____________________________ |
    ||      || __________________________ ||
    ||      |||                          |||
    ||      |||                          |||
    ||      |||                          |||
    ||      |||____________W4____________|||
    ||      || __________________________ ||
    ||      |||                          |||
    ||      |||                          |||
    ||      |||____________W5____________|||
    ||__W2__||_____________W3_____________ |
    |__________________W1__________________|

内部ウィンドウW3の左に、生きたウィンドウW2が新たに作成されました。そして、内部ウィンドウW1が新たに作成され、これが新たにルートウィンドウになります。

インタラクティブな使用にたいして、Emacsは選択されたウィンドウを常に分割するコマンドを2つ提供します。これらは内部でsplit-windowを呼び出します。

Command: split-window-right &optional size

この関数は、選択されたウィンドウが左となるような、横並びの2つのウィンドウに分割する。sizeが正ならば左のウィンドウがsize列、負ならば右のウィンドウが-size列を与えられる。

Command: split-window-below &optional size

この関数は、選択されたウィンドウが上となるような、縦並びの2つのウィンドウに分割する。sizeが正ならば上のウィンドウがsize行、負ならば下のウィンドウが-size行を与えられる。

User Option: split-window-keep-point

この変数の値が非nil(デフォルト)なら、 split-window-belowは上述のように振る舞う。

nilの場合、split-window-belowは再表示が最小となるように、2つのウィンドウの各ポイントを調節する(これは低速な端末で有用である)。これは何であれ、以前ポイントがあったスクリーン行(screen line)を含むウィンドウを選択する。これは低レベルsplit-window関数ではなく、split-window-belowだけに影響することに注意。