Emacsでは、ポイントがテキストの表示範囲外に移動すると、自動スクロールが行われます。通常、自動スクロールによってポイントはウィンドウ内で垂直方向に中央揃えされますが、この動作を変更する方法がいくつかあります。
If you set scroll-conservatively to a small number
n, then moving point just a little off the screen (no
more than n lines) causes Emacs to scroll just enough
to bring point back on screen; if doing so fails to make point visible,
Emacs scrolls just far enough to center point in the window. If you set
scroll-conservatively to a large number (larger
than 100), automatic scrolling never centers point, no matter how far point
moves; Emacs always scrolls text just enough to bring point into view,
either at the top or bottom of the window depending on the scroll
direction. By default, scroll-conservatively
is 0, which means to always center point in the window. This said, in
minibuffer windows, scrolling is always conservative by default because
scroll-minibuffer-conservatively is non-nil, which takes precedence over scroll-conservatively.
自動スクロールを制御するもう一つの方法は、変数 scroll-step
をカスタマイズすることです。この値によって、ポイントが画面外に移動した際に自動的にスクロールさせる行数が決まります。この行数分だけスクロールしてもポイントが画面内に復帰しない場合は、代わりにポイントが中央に配置されます。デフォルト値は
0 で、(デフォルトでは)スクロール後にポイントが常に中央に配置されます。
自動スクロールを制御する3つ目の方法は、変数 scroll-up-aggressively と
scroll-down-aggressively
をカスタマイズすることです。これらの変数は、スクロール後のポイントの垂直位置を直接指定します。scroll-up-aggressively の値は、nil(デフォルト)か、0から1の間の浮動小数点数 f
のいずれかにする必要があります。後者の場合、ポイントがウィンドウの下端より下に移動したとき(つまり前方にスクロールしたとき)、Emacs
はウィンドウをスクロールし、ポイントがウィンドウ下端からウィンドウ高さの f
倍の位置にくるようにします。したがって、f
の値が大きいほどスクロールが積極的になり、より多くの新しいテキストが表示領域に入ります。デフォルト値の nil は 0.5 に相当します。
同様に、ポイントがウィンドウの上端を超える場合(つまり、後方にスクロールする場合)には scroll-down-aggressively
が使用されます。この値は、スクロール後にポイントがウィンドウの上端マージンからどれだけ離れているべきかを指定します。したがって、scroll-up-aggressively と同様に、値が大きいほどより大幅にスクロールします。
なお、変数 scroll-conservatively、scroll-step、および scroll-up-aggressively / scroll-down-aggressively
は、それぞれ相反する形で自動スクロールを制御します。そのため、自動スクロールをカスタマイズする際は、これらの方法のうち最大1つのみを選択してください。複数の変数をカスタマイズする場合、優先順位は
scroll-conservatively、次に scroll-step、そして最後に scroll-up-aggressively / scroll-down-aggressively となります。
変数 scroll-margin
は、ポイントがウィンドウの上端または下端にどれだけ近づけるかを制限します(アグレッシブスクロールで、上端と下端のマージン間のウィンドウ領域よりも大きな分数
f
が指定されている場合でも同様です)。その値は画面行数であり、ポイントがウィンドウの上端または下端からその行数分以内に近づいた場合、Emacs
は自動的にスクロールを行います。デフォルトでは scroll-margin は 0
です。実効マージンサイズはデフォルトでウィンドウ高さの 4 分の 1 に制限されていますが、maximum-scroll-margin をカスタマイズすることで、この制限を最大で半分まで拡大(または 0
まで縮小)できます。