Next: , Previous: Window Point, Up: Windows


27.10 ウィンドウの開始位置

各ウィンドウには、バッファのどの箇所から表示を始めるかを指定する バッファ内位置を追跡するために使うマーカがあります。 この位置をウィンドウの表示開始(display-start)位置 (あるいは単に開始(start)位置)と呼びます。 この位置の直後にある文字が、ウィンドウの左上隅に現れます。 この位置は、通常、テキスト行の先頭にありますが、必須ではありません。

— Function: window-start &optional window

この関数は、ウィンドウwindowの表示開始位置を返す。 windownilであると、 選択されているウィンドウを使う。 たとえばつぎのとおりである。

          (window-start)
               ⇒ 7058

新たにウィンドウを作成したり異なるバッファをウィンドウに表示すると、 表示開始位置は、当該バッファの最近に使われた表示開始位置になるか、 バッファに表示開始位置がなければ1になる。

再表示するとウィンドウ開始位置は (それ以前の再表示で明示的に位置を指定していなければ)、 ポイントがスクリーンに現れるように更新される。 再表示以外には、ウィンドウ開始位置を自動的に変更しない。 ポイントを移動しても、つぎの再表示までは、 連動してウィンドウ開始位置が変更されると期待しないこと。

window-startを使った実際的な例は、 Text Linescount-linesの記述を参照。

— Function: window-end &optional window update

この関数は、ウィンドウwindowの表示の末尾の位置を返す。 windownilであると、選択されているウィンドウを使う。

バッファのテキストを変更したりポイントを移動しただけでは、 window-endが返す値は更新されない。 この値は、Emacsが再表示を実行し途中で止めることなく 最後まで終了した場合にのみ更新される。

windowの最後の再表示が途中で止められて完了していないと、 当該ウィンドウの表示の末尾の位置はEmacsにはわからない。

updatenil以外であると、 window-endはウィンドウの末尾の更新値をつねに返す。 保存しておいた値が正しければwindow-endはそれを返す。 さもなければ、バッファのテキストを走査して正しい値を計算する。

— Function: set-window-start window position &optional noforce

この関数は、windowの表示開始位置を windowのバッファ内の位置positionとする。 これはpositionを返す。

表示ルーティンは、バッファを表示するときには ポイント位置が可視であることを強要する。 通常、表示ルーティンは、ポイントを可視にするために必要なときには 表示開始位置を(つまりウィンドウをスクロールして)変更する。 しかし、noforcenilを指定してこの関数で開始位置を指定すると、 ポイント位置がスクリーンからはみ出したとしても、 表示開始位置をpositionとすることを意味する。 ポイントがスクリーンからはみ出す場合には、 表示ルーティンはウィンドウの中央行の左端にポイントを移動する。

たとえば、ポイントが1にあるときに ウィンドウの開始位置を2にしたとすると、 ポイントはウィンドウの上端より『上』になる。 表示ルーティンは、再表示時にポイントが1のままであると 自動的にポイントを移動する。 以下に例を示す。

          
          
          ;; set-window-startを実行するまえの
          ;; foo’の見え方
          
          ---------- Buffer: foo ----------
          -!-This is the contents of buffer foo.
          2
          3
          4
          5
          6
          ---------- Buffer: foo ----------
          
          (set-window-start
           (selected-window)
           (1+ (window-start)))
          ⇒ 2
          
          
          
          ;; set-window-startを実行したあとの
          ;; foo’の見え方
          ---------- Buffer: foo ----------
          his is the contents of buffer foo.
          2
          3
          -!-4
          5
          6
          ---------- Buffer: foo ----------

noforcenil以外であって positionにするとつぎの再表示時にポイントがスクリーンからはみ出す 場合には、再表示ではポイントが収まるように新たなウィンドウ開始位置を 計算し、positionを使わない。

— Function: pos-visible-in-window-p &optional position window

この関数は、window内のpositionがスクリーン上で 現在可視なテキストの範囲内にあればtを返す。 positionがスクリーンの上下端からはみ出す場合にはnilを返す。 引数positionのデフォルトはポイントの現在位置であり、 windowのデフォルトは選択されているウィンドウである。 例を示す。

          (or (pos-visible-in-window-p
               (point) (selected-window))
              (recenter 0))

関数pos-visible-in-window-pは、垂直方向のスクロールだけを考慮する。 windowを水平方向にスクロールしたために positionがはみ出している場合には、 pos-visible-in-window-ptを返す。 see Horizontal Scrolling