次: , 前: Window Start, 上: Windows


27.11 垂直スクロール

垂直スクロールとは、ウィンドウ内のテキストを上向きや下向きに動かすことです。 ウィンドウの表示開始位置の値を変更することで動作します。 ポイントがスクリーン内に留まるようにwindow-pointの 値を変更することもあります。

コマンドscroll-upscroll-downの 方向を示す『up』(上向き)と『down』(下向き)は、 ウィンドウを見ているときのバッファ内のテキストの移動方向を表します。 テキストは縦に長い紙に(横書きで)書いてあり、 スクロールコマンドはその紙を上下に動かすと想像してください。 したがって、バッファの中ほどのテキストを見ているときに scroll-downを繰り返し呼び出すと、 最終的にはバッファの先頭を見ることになります。

逆の慣習の名前を使うべきだと主張する人々もいます。 彼らは、固定されたテキストのうえをウィンドウが動いていると想像するのです。 すると、『下向き』のコマンドはバッファの末尾に移動することになります。 この見方は、ウィンドウとバッファ内のテキストとの実際の関係に よく適合しているのですが、ユーザーはそのように考えないようです。 端末上ではウィンドウは動きませんし、スクロールコマンドは 明らかにテキストをスクリーン上で上下に動かしています。 ユーザーの視点に合う名称を選んだのです。

カレントバッファと選択されているウィンドウに 表示されているバッファとが異なる場合には、 (scroll-other-window以外の)スクロール関数の結果は予測できません。 See Current Buffer

— コマンド: scroll-up &optional count

この関数は、選択されているウィンドウのテキストを 上向きにcount行だけスクロールする。 countが負であると、実際のスクロール方向は下向きである。

countnil(あるいは省略)であると、 スクロール量は、ウィンドウの(モード行を数えない)利用可能な高さより next-screen-context-linesだけ少なくなる。

scroll-upnilを返す。

— コマンド: scroll-down &optional count

この関数は、選択されているウィンドウのテキストを 下向きにcount行だけスクロールする。 countが負であると、実際のスクロール方向は上向きである。

countnil(あるいは省略)であると、 スクロール量は、ウィンドウの(モード行を数えない)利用可能な高さより next-screen-context-linesだけ少なくなる。

scroll-downnilを返す。

— コマンド: scroll-other-window &optional count

この関数は、別のウィンドウのテキストを上向きに count行だけスクロールする。 countの値が負であったりnilであると、 scroll-upと同様に扱う。

変数other-window-scroll-bufferで、スクロールするバッファを指定できる。 選択されているウィンドウがミニバッファ用であるときには、 つぎのウィンドウは、通常、もっとも左上隅にあるウィンドウである。 変数minibuffer-scroll-windowで、 スクロールする別のウィンドウを指定できる。 別のウィンドウが選択されている場合には、この変数の効果はない。 see Minibuffer Misc

ミニバッファが活性であると、 右下隅のウィンドウが選択されているウィンドウであるときには、 つぎのウィンドウはミニバッファ用ウィンドウである。 この場合、scroll-other-windowはミニバッファをスクロールしようとする。 ミニバッファにたった1行しか入っていなければスクロールできず、 エコー領域に『Beginning of buffer』と短時間表示されたあとで、 ミニバッファの行が再度現れる。

— 変数: other-window-scroll-buffer

この変数がnil以外であると、 scroll-other-windowがスクロールするバッファを指定する。

— ユーザオプション: scroll-margin

このオプションは、スクロール時の余白の大きさ、 つまり、ポイントとウィンドウの上端や下端とのあいだにある最低行数を指定する。 ウィンドウの上端や下端からこの行数以内にポイントが移動するたびに、 (可能ならば)ウィンドウを自動的にスクロールして、 ポイントを余白の外側でウィンドウの中央近くに移動する。

— ユーザオプション: scroll-conservatively

この変数は、ポイントがスクリーンからはみ出したとき (あるいはスクロール時の余白に入ったとき)に どのように自動的にスクロールするかを制御する。 値が0であると、ウィンドウの縦方向でポイントが中央にくるように テキストをスクロールして再表示する。 値が正の整数nであると、 ウィンドウをどちらかの方向に最大n行だけスクロールすると ポイントが見えるようになるときには、そのようにスクロールして再表示する。 さもなければ、ポイントが中央にくるようにする。 デフォルト値は0である。

— ユーザオプション: scroll-step

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

— ユーザオプション: scroll-preserve-screen-position

このオプションがnil以外であると、 スクロール関数は、可能ならばカーソルの垂直方向の位置を 変えないようにポイントを移動する。

— ユーザオプション: next-screen-context-lines

この変数の値は、1画面分スクロールしたときに連続して残っている行数である。 たとえば、引数nilscroll-upは、 ウィンドウの下端にあるこの行数だけの行が上端にくるようにスクロールする。 デフォルト値は2である。

— コマンド: recenter &optional count

この関数は、選択されているウィンドウをスクロールして ポイント位置にあるテキストがウィンドウ内の垂直方向の指定位置にくるようにする。

countが非負の数であると、ポイント位置にある行を ウィンドウの上端からcount行下にくるようにする。 countが負の数であると、ウィンドウの下端から数え、 −1はウィンドウの使用可能な最後の行を表す。 countnil以外のリストであると、 ウィンドウの中央の行を表す。

countnilであると、recenterは、 ポイント位置にある行がウィンドウの中央にくるようにして、 選択されているフレーム全体をクリアして再表示する。

recenterが対話的に呼び出されると、countは生の前置引数である。 したがって、前置引数としてC-uと打つと countnil以外のリストになり、 C-u 4と打つとcountは4になって上端から4行目に現在行がくる。

引数が0であると、 recenterはウィンドウの上端に現在行がくるようにする。 この動作は、このための専用のキーバインディングをする人がいるくらい便利である。 たとえばつぎのようにする。

          (defun line-to-top-of-window ()
            "Scroll current line to top of window.
          Replaces three keystroke sequence C-u 0 C-l."
            (interactive)
            (recenter 0))
          
          (global-set-key [kp-multiply] 'line-to-top-of-window)