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


28.6 ウィンドウの分割

このセクションでは既存のウィンドウを分割(splitting)することによりウィンドウを新たに作成する関数を説明します。ここで説明する理由により関数が失敗するという意味において、特別なウィンドウがいくつかあることに注意してください。このようなウィンドウの例としてサイドウィンドウ(Side Windowsを参照)やアトミックウィンドウ(Atomic Windowsを参照)があります。

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はウィンドウのトータル高さを行数で指定する。

sidetrightなら新たなウィンドウは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だけに影響することに注意。