次: , 前: Horizontal Scrolling, 上: Windows


27.13 ウィンドウサイズ

Emacsのウィンドウは矩形であり、そのサイズ情報は 高さ(行数)と幅(各行の文字数)から成ります。 モード行は高さに含みます。 しかし、スクロールバーや左右のウィンドウを隔てる文字`|'のコラムは 幅には含みません。

つぎの3つの関数は、ウィンドウのサイズ情報を返します。

— 機能: window-height &optional window

この関数は、モード行を含むwindowの行数を返す。 windowがフレーム全体を占める場合、この値は典型的には、 当該フレームにおけるframe-heightの値より1小さい (最後の行はミニバッファ用につねに確保してあるため)。

windownilであると、この関数は選択されているウィンドウを使う。

          (window-height)
               => 23
          (split-window-vertically)
               => #<window 4 on windows.texi>
          (window-height)
               => 11
     
— 機能: window-width &optional window

この関数は、windowのコラム数を返す。 windowがフレーム全体を占める場合、この値は、 当該フレームにおけるframe-widthの値と同じである。 この幅には、ウィンドウのスクロールバーや 左右のウィンドウを隔てる文字`|'のコラムは含まない。

windownilであると、この関数は選択されているウィンドウを使う。

          (window-width)
               => 80
     
— 機能: window-edges &optional window

この関数は、windowの四隅の座標から成るリストを返す。 windownilであると、選択されているウィンドウを使う。

list内の順番は(left top right bottom) (つまり、左端、上端、右端、下端)であり、 フレームの左上隅を0としてすべての要素は0を基準とする。 要素rightwindowが使用する右端のコラムより1大きく、 bottomwindowが使用する下端より1大きく モード行と同じである。

左右に隣り合ったウィンドウがある場合、 右隣にウィンドウがあるウィンドウの右端の値には、 ウィンドウを隔てる区切りの幅が含まれる。 この区切りは、文字`|'のコラムであるかスクロールバーである。 ウィンドウの幅にはこの区切りは含まないため、 この場合、左端と右端の差は幅に等しくない。

典型的な24行の端末でウィンドウが1つの場合に得られる結果を示す。

          (window-edges (selected-window))
               => (0 0 80 23)
     

下端が23行目であるのは、最下行はエコー領域だからである。

windowがフレームの左上隅にあると、 bottom(window-height)の値に等しく、 right(window-width)の値にほぼ等しく 1topleftは0である。 たとえば、つぎのウィンドウは`0 0 5 8'である。 当該フレームには8コラムより多くあり、 ウィンドウの最終コラム(7コラム目)はテキストではなく境界であると仮定する。 最後の行(4行目)はモード行であり、ここでは`xxxxxxxxx'で示した。

                     0
                     _______
                  0 |       |
                    |       |
                    |       |
                    |       |
                    xxxxxxxxx  4
          
                            7
     

左右に隣り合ったウィンドウがあるときには、 フレームの右端にないウィンドウの最後のコラムは区切りである。 区切りは、ウィンドウの幅では1コラムか2コラム占める。 左側の区切りは左隣のウィンドウに属するので、 ウィンドウには左側の区切りは含まれない。

つぎの例では、フレームは7コラム幅であるとする。 すると、左側のウィンドウの四隅は`0 0 4 3'であり、 右側のウィンドウの四隅は`4 0 7 3'である。

                     ___ ___
                    |   |   |
                    |   |   |
                    xxxxxxxxx
          
                     0  34  7
     

脚注

[1] rightは垂直の区切り行やスクロールバーを含むが、 (window-width)はそれらを含まないため、 完全に等しくはない。