ウィンドウはそれぞれバッファー位置を追跡するために、バッファー内で表示を開始すべき位置を指定するマーカーを保守しています。この位置はそのウィンドウのdisplay-start(表示開始)、または単にstart(開始)と呼ばれます。この位置の後の文字がウィンドウの左上隅に表示される文字となります。これは通常はテキスト行の先頭になりますが必須ではありません。
ウィンドウやバッファーの切り替え後やいくつかのケースにおいては、ウィンドウが行の途中で開始される場合にEmacsがィンドウの開始を行の開始に調整します。これは行中で無意味な位置のウィンドウ開始のまま特定の操作が行われるのを防ぐためです。この機能はLispモードのコマンドを使用して実行することによりある種のLispコードをテストする場合には、それらのコマンドがこの再調整を誘発してしまうので邪魔かもしれません。そのようなコードをテストするためには、それをコマンド内に記述して何らかのキーにバインドしてください。
この関数はウィンドウwindowの表示開始位置をリターンする。windowがnil
なら選択されたウィンドウが使用される。
ウィンドウを作成したり他のバッファーをウィンドウ内に表示する際、display-start位置は同じバッファーにたいしてもっとも最近に使用されたdisplay-start位置、そのバッファーがそれをもたなければpoint-min
にセットされる。
ポイントがスクリーン上に確実に現れるように、再表示はwindow-start位置を更新する(前の再表示以降にwindow-start位置を明示的に指定していない場合)。再表示以外にwindow-start位置を自動的に変更するものはない。ポイントを移動した場合には、次の再表示後までポイントの移動に応じてwindow-startが変更されることを期待してはならない。
この関数はwindow-start
と同様だが、windowがウィンドウグループ(Window Groupを参照)の一部なら、window-group-start
はグループ全体の開始位置をリターンする点が異なる。この条件はバッファーローカル変数window-group-start-function
に関数がセットされている際に保持される。この場合には、window-group-start
はその関数を単一の引数windowで呼び出して結果をリターンする。
この関数はwindowのバッファーの最後を表示する位置をリターンする。windowにたいするデフォルトは選択されたウィンドウ。
バッファーテキストの単なる変更やポイントの移動ではwindow-end
がリターンする値は更新されない。この値はEmacsが再表示を行って、妨害されることなく再表示が完了したときのみ更新される。
windowの最後の再表示が妨害されて完了しなかったら、Emacsはそのウィンドウ内の表示のend位置を知らない。関数はこの場合はnil
をリターンする。
updateが非nil
なら、window-end
はwindow-start
のカレント値にもとづき、どこが表示のendなのか最新の値をリターンする。以前に保存された位置の値がまだ有効なら、window-end
はその値をリターンする。それ以外はバッファーのテキストをスキャンして正しい値を計算する。
たとえupdateが非nil
であっても、window-end
はポイントが画面外に移動した場合に実際の再表示が行うような表示のスクロールを試みない。これはwindow-start
の値を変更しない。これは実際にはスクロールが要求されない場合の表示されたテキストのendがどこかを報告する。リターンされる位置は部分的に可視なだけかもしれないことに注意。
この関数はwindow-end
と同様だが、windowがウィンドウグループ(Window Groupを参照)の一部なら、window-group-end
はグループ全体の終了位置をリターンする点が異なる。この条件はバッファーローカル変数window-group-end-function
に関数がセットされている際に保持される。この場合には、window-group-end
はその関数を2つの引数windowとupdateで呼び出して結果をリターンする。引数updateはwindow-end
の場合と同じ意味をもつ。
この関数はwindowのdisplay-start位置をwindowのバッファーのpositionにセットする。リターン値はposition。
表示ルーチンはバッファーが表示されたときにポイント位置が可視になることを強要する。通常これらは内部ロジックに応じてポイントを可視にするためにdisplay-start位置を選択(および必要ならつまりウィンドウをスクロール)する。しかしこの関数でnoforceにnil
を使用してstart位置を指定した場合は、たとえポイントを画面外になるような場所に配置したとしても、positionでの表示開始を望んでいることを意味する。これによりポイントが画面外に配置されると、表示ルーチンはポイントをウィンドウ内の中央行の左マージンに移動しようと試みる。
たとえばポイントが1のときにウィンドウのstartを次行の開始37にセットすると、ポイントはウィンドウの最上端より上になるだろう。表示ルーチンは再表示が発生したときにポイントが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) (save-excursion (goto-char 1) (forward-line 1) (point))) ⇒ 37
;; 以下は式set-window-start
実行後の
;; ‘foo’の様子
---------- Buffer: foo ----------
2
3
∗4
5
6
---------- Buffer: foo ----------
ポイントを可視(つまり完全に可視なスクリーン行内にポイントを配置)にする試みが失敗すると、表示ルーチンは要求されたwindow-start位置を無視して、とにかく新しい位置を計算する。したがってこの関数を呼び出すLispプログラムが信頼できる結果を得るためには、表示がpositionで始まるウィンドウ内部に常にポイントを移動すること。
noforceが非nil
で、かつ次回の再表示でポイントが画面外に配される場合、再表示はポイントと協調して機能する位置となるような新たなwindow-startを計算するので、positionは使用されない。
この関数はset-window-start
と同様だが、windowがウィンドウグループ(Window Groupを参照)の一部なら、set-window-group-start
はグループ全体の開始位置をリターンする点が異なる。この条件はバッファーローカル変数set-window-group-start-function
に関数がセットされている際に保持される。この場合には、set-window-group-start
はその関数を3つの引数window、position、noforceで呼び出して結果をリターンする。この関数の引数positionとnoforceはset-window-start
の場合と同じ意味をもつ。
この関数はwindow内のpositionが画面上カレントで可視のテキスト範囲内にあれば非nil
、positionが表示範囲のスクロール外にあればnil
をリターンする。partiallyがnil
なら部分的に不明瞭な位置は可視とは判断されない。引数positionのデフォルトはwindow内のポイントのカレント位置、windowのデフォルトは選択されたウィンドウ。positionがt
なら、それはwindowの最後に可視だった行の位置、またはEOB(end-of-buffer:
バッファー終端位置のいずれか前方になる位置をチェックすることを意味する。
この関数は垂直スクロールだけを考慮する。positionが表示範囲外にある理由が、windowが水平にスクロールされただけなら、いずれにせよpos-visible-in-window-p
は非nil
をリターンする。水平スクロールを参照のこと。
positionが可視でpartiallyがnil
なら、pos-visible-in-window-p
はt
をリターンする。partiallyが非nil
でposition以降の文字が完全に可視なら、(x
y)
という形式のリストをリターンする。ここでxとyはウィンドウの左上隅からの相対的なピクセル座標。position以降の文字が完全に可視ではなければ、拡張された形式のリスト(x
y rtop rbot rowh
vpos)
をリターンする。ここでrtopとrbotはpositionでウィンドウ外となった上端と下端のピクセル数、rowhはその行の可視な部分の高さ、vposはその行の垂直位置(0基準の行番号)を示す。
以下は例:
;; ポイントが画面外ならrecenterする
(or (pos-visible-in-window-p
(point) (selected-window))
(recenter 0))
この関数はpos-visible-in-window-p
と同様だが、windowがウィンドウグループ(Window Groupを参照)の一部なら、pos-visible-in-window-group-p
はwindow単独ではなく、グループ全体でposの可視性をテストする点が異なる。この条件はバッファーローカル変数pos-visible-in-window-group-p-function
に関数がセットされている際に保持される。この場合には、pos-visible-in-window-group-p
はその関数を3つの引数position、window、partiallyで呼び出して結果をリターンする。この関数の引数positionとpartiallyはpos-visible-in-window-p
の場合と同じ意味をもつ。
この関数はwindow内のテキスト行lineの高さをリターンする。lineがheader-line
、mode-line
、window-line-height
のいずれかなら、そのウィンドウの対応する行についての情報をリターンする。それ以外では、lineは0から始まるテキスト行番号。負数ならそのウィンドウのendから数える。lineにたいするデフォルトはwindow内のカレント行、windowにたいするデフォルトは選択されたウィンドウ。
表示が最新でなければwindow-line-height
はnil
をリターンする。その場合には関連する情報を入手するためにpos-visible-in-window-p
を使用できる。
指定されたlineに対応する行がなければ、window-line-height
はnil
をリターンする。それ以外では、リスト(height
vpos ypos
offbot)
をリターンする。ここでheightはその行の可視部分のピクセル高さ、vposとyposは最初のテキスト行上端からのその行への相対的な垂直位置の行数とピクセル数、offbotはそのテキスト行下端のウィンドウ外のピクセル数。(最初の)テキスト行上端にウィンドウ外のピクセルがある場合にはyposは負となる。