次: , 前: Vertical Scrolling, 上: Windows


27.12 水平スクロール

英文は『内側のループ』では左から右へ『外側のループ』では上から下へと読むので、 水平スクロールは垂直スクロールには似ていません。 垂直スクロールでは表示するテキストの連続部分を選びますが、 水平スクロールでは各行の一部がスクリーンからはみ出すことになります。 そのため、水平スクロールの量は、バッファ内の位置ではなく、 コラム数で指定します。 これは、window-startが返す表示開始位置とはなんの関係もありません。

通常、水平スクロールは行われません。 つまり、左端のコラムはウィンドウの左端にあります。 この状態で右向きにスクロールしても、 それによって見えてくるスクリーンの左側にはなにもないので意味がありません。 ですから、これは禁止されます。 左向きへのスクロールは許されて、 テキストの先頭コラムはウィンドウの端からはみ出し、 それまで切り詰められていた右側のコラムが見えるようになります。 左向きの水平スクロール量が0でなければ、 右向きへスクロールして戻せますが、 これは全体としての水平スクロール量が0になるまでです。 左向きスクロールの限界はありませんが、 最終的にはテキストすべてが左端からはみ出してしまいます。

— コマンド: scroll-left count

この関数は、選択されているウィンドウをcountコラムだけ 左向きに(countが負ならば右向きに)スクロールする。 戻り値は、変更後の左向き水平スクロール量の総量であり、 window-hscroll(下記参照)が返す値と同じである。

— コマンド: scroll-right count

この関数は、選択されているウィンドウをcountコラムだけ 右向きに(countが負ならば左向きに)スクロールする。 戻り値は、変更後の左向き水平スクロール量の総量であり、 window-hscroll(下記参照)が返す値と同じである。

可能なだけウィンドウを右向きにスクロールしてしまうと、 通常の状態、つまり、左向き水平スクロール量が0になり、 それ以降、右向きスクロールは効果がなくなる。

— 機能: window-hscroll &optional window

この関数は、windowの左向き水平スクロール量の総量、 つまり、windowのテキストが左端を超えてスクロールされたコラム数を返す。

値はけっして負にはならない。 windowが水平方向にスクロールされていなければ (これが通常の状態)0である。

windownilであると、選択されているウィンドウを使う。

          (window-hscroll)
               => 0
          (scroll-left 5)
               => 5
          (window-hscroll)
               => 5
     
— 機能: set-window-hscroll window columns

この関数は、windowのスクロールされている左端からのコラム数を columnsの値とする。 引数columnsは0か正であること。 さもないと0と仮定する。

戻り値はcolumnsである。

          (set-window-hscroll (selected-window) 10)
               => 10
     

水平スクロールのために指定位置positionが スクリーンからはみ出しているかどうかを調べる方法をつぎに示します。

     (defun hscroll-on-screen (window position)
       (save-excursion
         (goto-char position)
         (and
          (>= (- (current-column) (window-hscroll window)) 0)
          (< (- (current-column) (window-hscroll window))
             (window-width window)))))