ポイントが表示されているテキスト部分から外に移動すると、Emacsは自動スクロール(automatic scrolling)の処理を行います。通常自動スクロールは、ウィンドウの垂直方向の中央にポイントをセンタリングしますが、この振る舞いを変えるいくつかの方法があります。
scroll-conservatively
に小さい数字nをセットすると、ポイントが少し(n行以下)スクリーンの外に出たら、Emacsはポイントがスクリーンに表示されるのに充分なだけスクロールします。これでもしポイントの表示に失敗した場合、Emacsはそのウィンドウの中央にポイント行が表示されるのに充分なだけのスクロールをします。scroll-conservatively
に大きな数字(100より大)も数字をセットすると、どれだけポイントを移動させようと、自動スクロールはポイント行を中央にセンタリングしなくなります。Emacsはポイントが表示されるように常にテキストをスクロールします。ウィンドウの上端または下端かはスクロールの方向に依存します。デフォルトではscroll-conservatively
は 0で、これは常にポイント行がウィンドウの中央にセンタリングされることを意味します。つまりミニバッファーウィンドウでは、scroll-conservatively
より優先されるscroll-minibuffer-conservatively
がデフォルトでは非nil
なので、常にconservative(保守的)なスクロールになると言うことです。
自動スクロールを制御する他の方法は、変数scroll-step
をカスタマイズすることです。この変数の値はポイントがスクリーンから外れたとき、何行を自動スクロールさせるかを決定します。その行数スクロールしてもポイントが表示されない場合、かわりにポイント行が中央にきます。デフォルト値は0で、スクロール後は常にポイント行が中央にきます。
自動コントロールを制御する3番目の方法は、変数scroll-up-aggressively
とscroll-down-aggressively
をカスタマイズすることで、これは直接スクロール後のポイントの垂直位置を指定します。scroll-up-aggressively
の値には、nil
(デフォルト)、または0から1までの浮動小数点数fを指定します。ポイントがウィンドウの下端を越えたとき(たとえば前方にスクロールしたとき)、Emacsはウィンドウの高さとウィンドウの下端からポイント行までの割合が、fになるようスクロールします。つまりfを大きくするとより積極的(aggressive)、つまり新しいテキストがより多く表示されることを意味します。デフォルト値nil
は0.5と同じです。
同様にscroll-down-aggressively
は、ポイントがウィンドウの上端を越えたとき(たとえば後方にスクロールしたとき)の振る舞いを設定します。値にはスクロール後のウィンドウの上端からポイント行までのマージンを指定します。つまりscroll-up-aggressively
を大きくすると、より積極的になります。
変数scroll-conservatively
、scroll-step
、およびscroll-up-aggressively
とscroll-down-aggressively
は、互いに矛盾する方法で自動スクロールを制御します。したがって自動スクロールをカスタマイズする場合は、2つ以上の手法を選ぶべきではありません。もし2つ以上の変数をカスタマイズする場合は、scroll-conservatively
、次にscroll-step
、そして最後にscroll-up-aggressively
とscroll-down-aggressively
という優先順でカスタマイズしてください。
変数scroll-margin
は(たとえscroll-up-aggressivelyやscroll-down-aggressivelyに、上端または下端からのマージンがウィンドウにたいして占める割合より大きくなるようなfを指定していても)、ポイントがウィンドウの上端または下端にどれだけ近づけるかを制限します。変数の値にはスクリーン行の行数です。もしポイントがウィンドウの上端または下端から指定した行数の位置にくると、Emacsは自動的にスクロールします。デフォルトではscroll-margin
は0です。デフォルトではそのウィンドウの高さの1/4に制限されていますが、maximum-scroll-margin
をカスタマイズすることにより1/2まで増加(または0まで減少)させることができます。