Next: Textual Scrolling, Previous: Window Point, Up: Windows [Contents][Index]
ウィンドウはそれぞれ、バッファー位置を追跡するために、バッファー内で表示を開始すべき位置を指定するマーカーを保守しています。この位置は、そのウィンドウのdisplay-start(表示開始)、または単にstart(開始)と呼ばれます。この位置の後の文字が、ウィンドウの左上隅に表示される文字となります。これは通常はテキスト行の先頭になりますが、必須ではありません。
ウィンドウやバッファーを切り替えた後、およびいくつかのケースにおいては、ウィンドウが行の途中で開始される場合は、Emacsがィンドウの開始を行の開始に調整します。これは、行中で無意味な位置のウィンドウ開始のまま、特定の操作が行われるのを防ぐためです。この機能は、Lispモードのコマンドを使用して実行することによりある種のLispコードをテストする場合は、それらのコマンドがこの再調整を誘発するために邪魔になるかもしれません。そのようなコードをテストするためには、それをコマンド内に記述して、何らかのキーにバインドしてください。
この関数は、ウィンドウwindowの表示開始位置をリターンする。windowがnil
なら、選択されたウィンドウが使用される。
ウィンドウを作成したり、他のバッファーをウィンドウ内に表示する際、display-start位置は同じバッファーにたいしてもっとも最近に使用されたdisplay-start位置か、そのバッファーがそれをもたなければpoint-min
にセットされる。
ポイントがスクリーン上に確実に現れるように、再表示はwindow-start位置を更新する(前の再表示以降にwindow-start位置を明示的に指定していない場合)。再表示以外に、window-start位置を自動的に変更するものはない。ポイントを移動した場合は、次の再表示後までポイントの移動に応じてwindow-startが変更されるのを期待してはならない。
この関数は、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の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 ----------
noforceが非nil
で、かつ次回の再表示でポイントが画面外に配される場合、再表示はポイントと協調して機能する位置となるような新たなwindow-startを計算するので、positionは使用されない。
この関数は、window内のpositionが画面上カレントで可視のテキスト範囲内にある場合は、非nil
をリターンし、positionが表示範囲のスクロール外にある場合は、nil
をリターンする。partiallyがnil
なら、部分的に不明瞭な位置は可視とは判断されない。引数positionのデフォルトは、window内のポイントのカレント位置で、windowのデフォルトは選択されたウィンドウである。positionがt
なら、それはwindowの最後に可視だった位置をチェックすることを意味する。
この関数は、垂直スクロールだけを考慮する。
This function considers only vertical scrolling.
windowが水平にスクロールされたことだけの理由でpositionが表示範囲外の場合は、いずれにせよpos-visible-in-window-p
は非nil
をリターンする。Horizontal Scrollingを参照のこと。
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))
この関数は、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は負となる。