Next: , Previous: , Up: Windows   [Contents][Index]


28.21 テキスト的なスクロール

テキスト的なスクロール(textual scrolling)とは、ウィンドウ内のテキストを上や下に移動することを意味します。これはそのウィンドウのdisplay-startを変更することにより機能します。これはポイントを画面上に維持するためにwindow-pointの値も変更するかもしれません(Window Pointを参照)。

テキスト的なスクロールの基本的な関数は、(前方にスクロールする) scroll-up、および(後方にスクロールする) scroll-downです。これらの関数の名前の“up”と“down”は、バッファーテキストのそのウィンドウにたいする相対的な移動方向を示しています。そのテキストが長いロール紙に記述されていて、スクロールコマンドはその上を上下に移動すると想像してみてください。つまりバッファーの中央に注目している場合には、繰り返してscroll-downを呼び出すと最終的にはバッファーの先頭を目にすることになるでしょう。

これは残念なことに時折混乱を招きます。なぜならある人はこれを逆の慣習にもとづいて考える傾向があるからです。彼らはテキストがその場所に留まりウィンドウが移動して、“down”コマンドによりバッファー終端に移動するだろうと想像します。この慣習はそのようなコマンドが現代風のキーボード上のPageDownという名前のキーにバインドされているという事実と一致しています。

選択されたウィンドウ内で表示されているバッファーがカレントバッファーでなければ、(scroll-other-window以外の)テキスト的スクロール関数の結果は予測できません。Current Bufferを参照してください。

(たとえば大きなイメージがある等で)ウィンドウにウィンドウの高さより高い行が含まれる場合には、スクロール関数は部分的に可視な行をスクロールするためにそのウィンドウの垂直スクロール位置を調整します。Lisp呼び出し側は変数auto-window-vscrollnilにバインドすることにより、この機能を無効にできます(Vertical Scrollingを参照)。

Command: scroll-up &optional count

この関数は選択されたウィンドウ内でcount行前方にスクロールする。

countが負ならかわりに後方へスクロールする。countnil (または省略)ならスクロールされる距離は、そのウィンドウのテキストエリアの高さより小さいnext-screen-context-linesとなる。

この関数は選択されたウィンドウがそれ以上スクロールできなければエラーをシグナルして、それ以外はnilをリターンする。

Command: scroll-down &optional count

この関数は選択されたウィンドウ内でcount行後方にスクロールする。

countが負ならかわりに前方へスクロールする。それ以外の点ではこれはscroll-upと同様に振る舞う。

Command: scroll-up-command &optional count

これはscroll-upと同様に振る舞うが選択されたウィンドウがそれ以上スクロールできず、かつ変数scroll-error-top-bottomの値がtなら、かわりにそのバッファーの終端への移動を試みる。ポイントがすでに終端にあればエラーをシグナルする。

Command: scroll-down-command &optional count

これはscroll-downと同様に振る舞うが選択されたウィンドウがそれ以上スクロールできず、かつ変数scroll-error-top-bottomの値がtなら、かわりにそのバッファーの先頭への移動を試みる。ポイントがすでに先頭にあればエラーをシグナルする。

Command: scroll-other-window &optional count

この関数は他のウィンドウ内のテキストを上方にcount行スクロールする。countが負かnilならscroll-upのように処理される。

変数other-window-scroll-bufferにバッファーをセットすることにより、どのバッファーをスクロールするかを指定できる。そのバッファーが表示されていなければ、scroll-other-windowはそれを何らかのウィンドウにそれを表示する。

選択されたウィンドウがミニバッファーのとき、次ウィンドウは通常はそのウィンドウの直上最左のウィンドウである。変数minibuffer-scroll-windowをセットすることにより、スクロールする別のウィンドウを指定できる。この変数はミニバッファー以外のウィンドウが選択されているときは効果がない。これが非nil、かつミニバッファーが選択されているときにはother-window-scroll-bufferより優先される。Definition of minibuffer-scroll-windowを参照のこと。

ミニバッファーがアクティブのとき選択されたウィンドウが下端右角のウィンドウなら、ミニバッファーが次ウィンドウになる。この場合にはscroll-other-windowはミニバッファーのスクロールを試みる。ミニバッファーに含まれるのが1行だけならどこにもスクロールできないので、エコーエリアにメッセージ‘End of buffer’を瞬時表示した後にその行を再表示する。

Variable: other-window-scroll-buffer

この変数が非nilなら、それはscroll-other-windowがどのバッファーのウィンドウをスクロールするかを指定する。

User Option: scroll-margin

このオプションはスクロールマージン(ポイントとウィンドウの上端/下端との最小行数)のサイズを指定する。ポイントがウィンドウの上端/下端からその行数になったとき、(可能なら)再表示はポイントをそのマージン外のウィンドウ中央付近に移動するためにテキストを自動的にスクロールする。

User Option: maximum-scroll-margin

この変数はscroll-marginの実効値をカレントウィンドウの行高さの割合に制限する。たとえばカレントウィンドウが20行でmaximum-scroll-marginが0.1なら、scroll-marginがどれほど大きくてもスクロールマージンが2より大きくなることはない。

maximum-scroll-margin自体は最大値として0.5という値をもち、これはウィンドウの中央行(ウィンドウが偶数行なら中央の2行)までカーソルを維持するためにマージンを大きくセットすることを可能にする。大きな値(または0.0から0.5までの浮動小数点数以外の値)をセットするとデフォルト値0.25がかわりに使用される。

User Option: scroll-conservatively

この変数はポイントがスクリーン外(またはスクロールマージン内)に移動したときに自動的にスクロールを行う方法を指定する。値が正の整数nなら再表示はそれが正しい表示範囲内にポイントを戻すなら、いずれかの方向にn行以下のテキストをスクロールする。この振る舞いは保守的なスクロール(conservative scrolling)と呼ばれる。それ以外ならスクロールはscroll-up-aggressivelyscroll-down-aggressivelyのような他の変数の制御の下に通常の方法で発生する。

デフォルトの値は0でこれは保守的スクロールが発生し得ないことを意味する。

User Option: scroll-down-aggressively

この変数の値はnil、または0から1までの小数点数fであること。小数点数ならスクリーン上でポイントが置かれたとき下にスクロールする場所を指定する。より正確にはポイントがウィンドウstartより上という理由でウィンドウが下にスクロールされるときには、新たなstart位置がウィンドウ上端からウィンドウ高さのfの箇所にポイントが置かれるように選択される。より大きなfなら、よりaggressive(積極的)にスクロールする。

その効果はポイントを中央に配置することであり、値nilは.5と等価である。どのような方法によりセットされたときでも、この変数は自動的にバッファーローカルになる。

User Option: scroll-up-aggressively

scroll-up-aggressivelyの場合と同様。値fはポイントがウィンドウ下端からどれほどの位置に置かれるべきかを指定する。つまり、scroll-up-aggressivelyと同様に大きな値ではよりaggressive(積極的)になる。

User Option: scroll-step

この変数はscroll-conservativelyの古い変種である。違いは値がnならn以下の値ではなく、正確にnだけのスクロールを許容することである。この機能はscroll-marginとは共に機能しない。デフォルトは0。

User Option: scroll-preserve-screen-position

このオプションがtなら、スクロールによりポイントがウィンドウ外に移動したとき、Emacsは常にポイントがポイントの上下端ではなくカーソルがそのウィンドウ内の元の垂直位置に保たれるようポイントの調整を試みる。

値が非nilかつ非tなら、たとえスクロールコマンドによりポイントがウィンドウ外に移動していなくとも、Emacsはカーソルが同じ垂直位置に保たれるようにポイントを調整する。

このオプションはシンボルプロパティscroll-commandが非nilであるような、すべてのスクロールコマンドに影響する。

User Option: next-screen-context-lines

この変数の値は全画面スクロールされたときに継続して残される行数を指定する。たとえば引数がnilscroll-upはウィンドウ上端ではなく下端に残される行数でスクロールする。デフォルト値は2

User Option: scroll-error-top-bottom

このオプションがnil(デフォルト)なら、それ以上のスクロールが不可能な際にscroll-up-commandscroll-down-commandは単にエラーをシグナルする。

値がtなら、これらのコマンドはかわりにポイントをバッファーの先頭か終端(スクロール方向に依存する)に移動する。ポイントがすでにその位置にある場合のみエラーをシグナルする。

Command: recenter &optional count

この関数は選択されたウィンドウ内の指定された垂直位置にポイントを表示するようにウィンドウ内のテキストをスクロールする。これはテキストに応じたポイント移動を行わない。

countが非負の数なら、そのウィンドウ上端からcount行下にポイントを含む行を配置する。countが負ならウィンドウ下端から上に数えるので、-1はそのウィンドウ内で最後の利用可能な行となる。

countnil (または非nilのリスト)なら、recenterはポイントを含む行をウィンドウの中央に配置する。countnilなら、この関数はrecenter-redisplayの値に応じてフレームを再描画するかもしれない。

recenterがインタラクティブに呼び出されたときはrawプレフィックス引数がcountとなる。したがってプレフィックスとしてC-uをタイプするとcountに非nilC-u 4ではcountに4がセットされte、後者ではカレント行を上端から4行目にセットする。

引数0ではrecenterはカレント行をウィンドウ上端に配置する。コマンドrecenter-top-bottomはこれを達成するためにより簡便な方法を提供する。

Function: recenter-window-group &optional count

この関数はrecenterと同様だが、選択されたウィンドウがウィンドウグループ(Window Groupを参照)の一部の際には、recenter-window-groupがグループ全体をスクロールする点が異なる。この条件はバッファーローカル変数recenter-window-group-functionが関数にセットされている際に保持される。この場合にはrecenter-window-groupはその関数を引数countで呼び出して結果をリターンする。引数countrecenterの場合と同様の意味をもつが、ウィンドウグループ全体に作用する。

User Option: recenter-redisplay

この変数が非nilなら引数nilrecenterを呼び出すことによりフレームを再描画する。デフォルト値はttyで、これはフレームがttyフレームのときだけフレームを再描画することを意味する。

Command: recenter-top-bottom &optional count

デフォルトではC-lにバインドされているこのコマンドは、recenterと同様に動作するが引数なしで呼び出されたときの動作が異なる。この場合には連続して呼び出すことにより変数recenter-positionsで定義されるサイクル順に応じてポイントを配置する。

User Option: recenter-positions

これはrecenter-top-bottomを引数なしで呼び出したときの挙動を制御する。デフォルト値は(middle top bottom)で、これは引数なしでrecenter-top-bottomを連続して呼び出すとポイントをウィンドウの中央、上端、下端と巡回して配置することを意味する。