テキストスクロールとは、ウィンドウ内でテキストを上下に移動させることを指します。これは、ウィンドウの表示開始位置を変更することで実現されます。また、ポイントを画面上に保持するために、window-pointの値を変更する場合もあります(ウィンドウとポイントを参照)。
基本的なテキストスクロール関数は、scroll-up(前方にスクロール)とscroll-down(後方にスクロール)です。これらの関数名における「上」および「下」は、ウィンドウに対するバッファテキストの移動方向を指します。テキストが長い紙のロールに書かれており、スクロールコマンドがその紙を上下に動かす様子を想像してください。したがって、バッファの中央を見ている状態でscroll-downを繰り返し呼び出すと、最終的にバッファの先頭が表示されることになります。
残念ながら、これが時に混乱を招くことがあります。というのも、一部の人は逆の慣習で考えがちだからです。つまり、テキストは固定されたままウィンドウが移動し、「down」コマンドでバッファの末尾へ移動すると想定してしまうのです。こうした慣習は、現代のキーボードにおいてそのようなコマンドが PageDown という名前のキーに割り当てられているという事実とも整合しています。
テキストスクロール機能(scroll-other-windowを除く)は、現在のバッファが選択中のウィンドウに表示されているバッファでない場合、動作が予測不能になります。現在のバッファを参照してください。
ウィンドウ内に、ウィンドウの高さを超える行が含まれている場合(例えば大きな画像がある場合など)、スクロール機能はウィンドウの垂直スクロール位置を調整して、一部が表示されている行をスクロールします。Lispの呼び出し側は、変数
auto-window-vscroll に nil をバインドすることで、この機能を無効にできます(垂直分数スクロールを参照)。
この関数は、選択中のウィンドウ内でcount行分前方にスクロールします。
count が負の値の場合、代わりに後方にスクロールします。count が nil
(または省略)の場合、スクロール距離はウィンドウのボディの高さより next-screen-context-lines 行分少なくなります。
選択されたウィンドウをそれ以上スクロールできない場合、この関数はエラーを通知します。それ以外の場合は、nil を返します。
この関数は、選択中のウィンドウ内でcount行分、後方にスクロールします。
count が負の場合、代わりに前方にスクロールします。それ以外の点では、scroll-up と同様に動作します。
これは scroll-up
と同様に動作しますが、選択中のウィンドウをそれ以上スクロールできず、かつ変数 scroll-error-top-bottom の値が t
である場合は、代わりにバッファの末尾へ移動しようとします。ポイントがすでにそこにある場合は、エラーを通知します。
これは scroll-down
と同様に動作しますが、選択されたウィンドウがそれ以上スクロールできず、かつ変数 scroll-error-top-bottom の値が t
である場合は、代わりにバッファの先頭に移動しようとします。ポイントがすでにそこにある場合は、エラーを通知します。
この関数は、別のウィンドウ内のテキストをcount行分上方向にスクロールします。countやnilの負の値は、scroll-upと同様に処理されます。
変数 other-window-scroll-buffer
にバッファを指定することで、どのバッファをスクロールするかを指定できます。そのバッファがまだ表示されていない場合、scroll-other-window が何らかのウィンドウにそれを表示します。
選択中のウィンドウがミニバッファである場合、通常、次のウィンドウはその直上にある最も左側のウィンドウになります。ミニバッファが選択されているときに、スクロールする別のウィンドウを指定するには、変数
minibuffer-scroll-window
を設定します。この変数は、他のウィンドウが選択されている場合には効果がありません。この変数が nil
以外であり、かつミニバッファが選択されている場合は、other-window-scroll-buffer よりも優先されます。minibuffer-scroll-window
の定義を参照してください。
この関数は、別のウィンドウ内のテキストを count 行分下にスクロールします。count や nil の負の値は、scroll-down と同様に処理されます。それ以外の点では、scroll-other-window と同じ動作をします。
この変数がnil以外の場合、scroll-other-windowに対してどのバッファのウィンドウをスクロールするかを指定します。
このオプションはスクロールマージンのサイズ(pointとウィンドウの上端または下端との間の最小行数)を指定します。pointがウィンドウの上端または下端からこの行数分以内に近づいたとき、redisplayは(可能な場合は)自動的にテキストをスクロールし、pointをマージンの外、ウィンドウの中央寄りに移動させます。
この変数は、scroll-margin
の実効値を現在のウィンドウの行高さの一定割合に制限します。例えば、現在のウィンドウが20行で maximum-scroll-margin が 0.1 の場合、scroll-margin がどれほど大きくても、スクロールマージンが2行を超えることはありません。
maximum-scroll-margin 自体の最大値は 0.5
であり、これによりマージンを大きく設定して、カーソルをウィンドウの中央行(ウィンドウの行数が偶数の場合は中央の 2
行)に保持することができます。より大きな値(または 0.0 から 0.5 の間の浮動小数点数以外の値)に設定した場合は、代わりにデフォルト値の 0.25
が使用されます。
この変数は、ポイントが画面外(またはスクロールマージン内)に移動した際に、自動的に行われるスクロールの動作を制御します。値が正の整数 n の場合、redisplay は、ポイントが適切な表示範囲内に戻るのであれば、上下いずれかの方向に n 行分までテキストをスクロールします。この動作は 保守的スクロール
と呼ばれます。それ以外の場合は、scroll-up-aggressively や scroll-down-aggressively
などの他の変数の制御により、通常の方法でスクロールが行われます。
デフォルト値は0であり、これはコンサバティブスクロールが一切行われないことを意味します。
この変数の値は、nil または 0 から 1 の間の分数 f
である必要があります。分数の場合、スクロールダウン時にポイントを画面上のどこに配置するかを指定します。より正確には、ポイントがウィンドウの開始位置より上にあるためにウィンドウがスクロールダウンする場合、新しい開始位置は、ウィンドウ高さの上端から
f の位置にポイントを配置するように選択されます。f
の値が大きいほど、スクロールはより急激に行われます。
nil の値は点を中央に配置する効果があるため、.5
と同等です。この変数は、どのような方法で設定しても自動的にバッファローカルになります。
同様に、上にスクロールする場合も同様です。値 f
は、ウィンドウの下端からポイントをどの程度離すかを指定します。したがって、scroll-down-aggressively と同様に、値が大きいほどより大きくスクロールします。
この変数は scroll-conservatively の旧バージョンです。違いは、値が n の場合、それより少ない行数ではなく、正確に n
行分のみスクロールが可能になる点です。この機能は scroll-margin
では動作しません。デフォルト値は 0 です。
このオプションが t
の場合、スクロールコマンドによってポイントがウィンドウ外に移動するたびに、Emacs
はカーソルをウィンドウの端ではなく、ウィンドウ内の元の垂直位置に維持するようにポイントを調整しようとします。
値が nil ではなく t
でもない場合、スクロールコマンドによってポイントがウィンドウ外に移動しなかったとしても、Emacs
はカーソルを同じ垂直位置に維持するようにポイントを調整します。
このオプションは、nil scroll-command 以外のシンボルプロパティを持つすべてのスクロールコマンドに影響します。
この変数の値は、フルスクリーンでスクロールする際に保持する連続行数です。例えば、引数に nil
を指定した scroll-up
では、ウィンドウ下部のこの行数分の表示が代わりに上部に現れるようにスクロールします。デフォルト値は 2 です。
このオプションが nil(デフォルト)、scroll-up-command、および scroll-down-command の場合、これ以上スクロールできなくなると単にエラーを通知します。
値が t
の場合、これらのコマンドは代わりにポイントをバッファの先頭または末尾(スクロール方向に応じて)に移動させます。ポイントがすでにその位置にある場合にのみ、エラーが報告されます。
この関数は、選択したウィンドウ内のテキストをスクロールし、ポイントがウィンドウ内の指定した垂直位置に表示されるようにします。テキストに対するポイントの位置は移動しません。
count が非負の数である場合、点 count を含む行はウィンドウの上端から下に向かって配置されます。count が負の数である場合は、ウィンドウの下端から上に向かって数えられるため、−1 がウィンドウ内で最後に利用可能な行となります。
count が nil(または nil 以外のリスト)である場合、recenter
は点を含む行をウィンドウの中央に配置します。count が nil であり、かつ redisplay が nil 以外である場合、この関数は recenter-redisplay
の値に応じてフレームを再描画することがあります。したがって、第2引数を省略することで、recenter-redisplay が nil
以外であることによる影響を打ち消すことができます。インタラクティブな呼び出しでは、redisplay に
nil 以外が渡されます。
recenter を対話的に呼び出すと、count
は生のプレフィックス引数となります。したがって、プレフィックスとして C-u と入力すると count に non-nil リストが設定され、C-u 4 と入力すると count に 4
が設定され、現在の行が上から 4 行目に配置されます。
引数に0を指定すると、recenter は現在の行をウィンドウの最上部に配置します。recenter-top-bottom というコマンドを使えば、より簡便にこれを実現できます。
この関数は recenter と同様ですが、選択されたウィンドウがウィンドウグループ(ウィンドウグループ
を参照)の一部である場合、recenter-window-group
はグループ全体をスクロールします。この条件は、バッファローカル変数 recenter-window-group-function
に関数が設定されている場合に成立します。この場合、recenter-window-group は引数
count を指定してその関数を呼び出し、その結果を返します。引数 count は recenter
と同様の意味を持ちますが、ウィンドウグループ全体に対して適用されます。
If this variable is non-nil, calling recenter with a nil count argument and non-nil redisplay argument redraws the frame. The default value
is tty, which means only redraw the frame if it is
a tty frame.
C-l のデフォルトバインディングであるこのコマンドは、引数なしで呼び出された場合を除き、recenter と同様に動作します。その場合、連続して呼び出すと、変数 recenter-positions で定義された巡回順に従ってポイントが移動します。
この変数は、引数なしで呼び出された際の recenter-top-bottom
の動作を制御します。デフォルト値は (middle top bottom) であり、これは引数なしで
recenter-top-bottom
を繰り返し呼び出すと、ポイントがウィンドウの中央、上部、下部のどこに配置されるかが循環することを意味します。