Next: , Previous: Basic Windows, Up: Windows


27.2 ウィンドウの分割

ここで述べる関数は、ウィンドウを2つに分割するための基本関数です。 上位レベルの2つの関数、pop-to-bufferdisplay-bufferも ウィンドウを分割しますが、 つねに分割するとは限りません(see Displaying Buffers)。

ここに述べる関数は、引数にはバッファを受け付けません。 分割されたウィンドウの2つの『部分』には、分割前に表示されていたのと 同じバッファが始めは表示されます。

— コマンド: split-window &optional window size horizontal

この関数はwindowを2つのウィンドウに分割する。 もとのウィンドウwindowは、選択されているウィンドウであり続けるが、 以前のスクリーン領域の一部を占めるだけである。 残りの部分は新たに作成されたウィンドウが占め、 そのウィンドウがこの関数の値として返される。

horizontalnil以外であると、windowは左右に分かれる。 もとのウィンドウwindowは左端のsizeコラムに留まり、 残りのコラムは新たなウィンドウに与えられる。 さもなければ、ウィンドウは上下に分かれ、 windowは上側のsize行に留まり、 残りの行は新たなウィンドウに与えられる。 したがって、もとのウィンドウは左側か上側にあり、 新たなウィンドウは右側か下側にある。

windowを省略したりnilであると、 選択されているウィンドウを分割する。 sizeを省略したりnilであると、 windowを均等に分ける。 (余分な行は新たなウィンドウに与える。) split-windowが対話的に呼び出されると、 すべての引数はnilである。

つぎの例では、50行×80コラムのスクリーン上の1つのウィンドウを分割する。

          (setq w (selected-window))
               ⇒ #<window 8 on windows.texi>
          
          
          (window-edges)          ; 順に
               ⇒ (0 0 80 50)     ;   左端--上端--右端--下端
          
          
          ;; 作成したウィンドウを返す
          (setq w2 (split-window w 15))
               ⇒ #<window 28 on windows.texi>
          (window-edges w2)
          
          
               ⇒ (0 15 80 50)    ; 下側のウィンドウの上端は15行目
          (window-edges w)
          
               ⇒ (0 0 80 15)     ; 上側のウィンドウ

スクリーンはつぎのようになる。

          
          
          
          
          
          
          
          
          
             ┌──────┐
             │      │ 0行目
             │   w  │
             │      │
             ├──────┤
             │      │15行目
             │   w2 │
             │      │
             └──────┘
                     50行目
          コラム0         コラム80

つぎに上側のウィンドウを左右に分割する。

          (setq w3 (split-window w 35 t))
               ⇒ #<window 32 on windows.texi>
          (window-edges w3)
          
               ⇒ (35 0 80 15)  ; 左端は35コラム目
          (window-edges w)
          
               ⇒ (0 0 35 15)   ; 右端は35コラム目
          (window-edges w2)
          
               ⇒ (0 15 80 50)  ; 下側のウィンドウは未変更

スクリーンはつぎのようになる。

          
          
          
          
          
          
          
          
          
          
             コラム35
             ┌─┬────┐
             │ │    │ 0行目
             │w│ w3 │
             │ │    │
             ├─┴────┤
             │      │15行目
             │   w2 │
             │      │
             └──────┘
                     50行目
          コラム0         コラム80

通常、Emacsは左右に並んだウィンドウの境界を スクロールバー(see Scroll Bars)か 文字‘|’で表す。 表示テーブルで境界に別の文字を指定できる。 Display Tablesを参照。

— コマンド: split-window-vertically size

この関数は、選択されているウィンドウを上下に2つに分割する。 上側が選択されているウィンドウのままで、size行の大きさになる。 (sizeが負であると、下側のウィンドウが− size行になり、 上側のウィンドウは残りになる。 しかし、それでも上側が選択されているウィンドウである。)

この関数はsplit-windowの単なるインターフェイスである。 その完全な関数定義はつぎのとおりである。

          (defun split-window-vertically (&optional arg)
            "Split current window into two windows, ..."
            (interactive "P")
            (split-window nil (and arg (prefix-numeric-value arg))))
— コマンド: split-window-horizontally size

この関数は、選択されているウィンドウを左右に2つに分割し、 選択されているウィンドウにはsizeコラム残す。

この関数はsplit-windowの単なるインターフェイスである。 split-window-horizontallyの完全な関数定義は (説明文字列を除けば)つぎのとおりである。

          (defun split-window-horizontally (&optional arg)
            "Split selected window into two windows, side by side..."
            (interactive "P")
            (split-window nil (and arg (prefix-numeric-value arg)) t))
— Function: one-window-p &optional no-mini all-frames

この関数は、ウィンドウがたった1つしかなければnil以外を返す。 引数no-mininil以外であると、 ミニバッファが活性であってもそれを数えないことを意味する。 さもなければ、ミニバッファが活性であればそれも総ウィンドウ個数に数えて 1と比較する。

引数all-framesは、どのフレームを対象にするかを指定する。 指定できる値とその意味はつぎのとおりである。

nil
選択されているフレームのウィンドウに加えて、 ミニバッファがどこに置かれていようと 当該フレームが使っているミニバッファを数える。
t
既存のすべてのフレームのウィンドウを数える。
visible
すべての可視フレームのすべてのウィンドウを数える。
0
すべての可視フレームやアイコンになっているフレームの すべてのウィンドウを数える。
その他
選択されているフレームだけでウィンドウを正確に数える。