画面の制御
*****

大きなバッファの一部しかウィンドウには収まりませんから、 Emacsは必要そうな部分を表示しようとします。画面制御コマンドを使って、テキストのどの部分を表示したいのか、また、どのように表示するか指定できます。

スクロール
=====

バッファを表示しているウィンドウに全部を表示するには大きすぎるテキストが入っているバッファでは、 Emacsはテキストの連続する一部分を表示します。表示する部分にはつねにポイントが入っています。

スクロール（scroll）とは、ウィンドウ内でテキストを上下に動かして、テキストの異なる部分を表示することです。前向きのスクロールでは、テキストを上へ移動して、新たなテキストがウィンドウの最下端から現れます。後向きのスクロールでは、テキストを下に移動して、新たなテキストがウィンドウの最上端から現れます。

ポイントをウィンドウの下端や上端を超えて移動すると、自動的にスクロールします。本節で紹介するコマンドを使って、明示的にスクロールすることもできます。

C-l
     画面をクリアして再表示し、選択されたウィンドウではポイントが縦方向の中央に位置するようにスクロールする（recenter）

C-v
     （ウィンドウ1面分か指定した行数だけ）前向きにスクロールする（scroll-up）。

NEXT
     同様に前向きにスクロールする。

M-v
     後向きにスクロールする（scroll-down）。

PRIOR
     同じく後向きにスクロールする。

ARG C-l
     ポイントがARG行目にくるようにスクロールする（recenter）。

C-M-l
     有益な情報が画面上にくるように発見的方法でスクロールする（reposition-window）。

もっとも基本的なスクロールコマンドは、引数を指定しないC-l（recenter）です。このコマンドは、画面全体をクリアして、すべてのウィンドウを再表示します。さらに、ポイントがウィンドウの中央の行に位置するように、選択されているウィンドウをスクロールします。

スクロールコマンドC-vとM-vは、ウィンドウ内の全テキストを上下に何行か移動します。 C-v（scroll-up）に引数を指定すると、 C-lと同じようにテキストとポイントを一緒に上へ移動して、追加分（引数分）の行をウィンドウの下部に表示します。 C-vに負の引数を指定した場合は、ウィンドウの上端に追加分の行を表示します。 M-v（scroll-down）はC-vに似ていますが、スクロール方向が逆です。ファンクションキーのNEXTとPRIORは、 C-vとM-vに等価です。

スクロールコマンドの名前は、ウィンドウ内でテキストを動かす向きに基づいています。したがって、前向きにスクロールするコマンドは、画面上ではテキストを上へ移動するため、 scroll-upと呼ばれます。

一度にウィンドウ1面分のバッファを読んでいくには、引数を指定せずにC-vを使います。ウィンドウの下端2行を上端に持っていき、それに続けてこれまで表示されていなかったほぼウィンドウ1面分の行を表示します。ポイントがウィンドウの上端より上に出てしまう場合には、ポイントはウィンドウの新たな上端の行に移動します。引数を指定しないM-vも同様に、テキストを重複させながら、後向きに移動します。 C-vやM-vで重複させる行数は、変数next-screen-context-linesで制御します。デフォルトでは2です。

画面上でのポイント位置を保ったまま 1画面分のスクロールを行うコマンドを好むユーザーもいます。このようにするには、変数scroll-preserve-screen-positionに nil以外を設定します。このモードは、 1画面分ずつスクロールしながらファイルを閲覧するような場合に便利です。スクロールを始めた画面に戻ると、ポイントは開始時の行位置に戻ります。しかし、つぎの画面に移動して、そこに表示されているテキストにポイントを移動するような使い方にはむいていません。

スクロールのもう1つの方法は、数引数を指定したC-lを使うことです。引数を指定すると、C-lは画面をクリアしません。選択されているウィンドウだけをスクロールします。正の引数Nを指定すると、ポイント位置が上端からN行目にくるように、テキストの位置を変更します。引数として0を指定すると、ポイント位置は最上端の行になります。ポイントがテキストに対して動くわけではなくて、テキストとポイントは一緒に画面上を動きます。 C-lに負の引数を指定すると、ポイントはウィンドウの下端から指定行数にきます。たとえば、C-u - 1 C-lとするとポイントは最下行になり、 C-u - 5 C-lとすれば下から5行目にポイントがきます。 C-u C-lのようにC-uだけを引数に指定すると、ポイントが画面中央にくるようにスクロールします。

C-M-lコマンド（reposition-window）は、有益な情報を画面上に持ってくるようにように設計された発見的手法で、カレントウィンドウをスクロールします。たとえば、Lispファイルでは、このコマンドは、可能であれば現在の関数定義（defun）全体を画面上にもってこようとします。

表示の際、ポイントがテキストの表示部分から飛び出してしまうと、自動的にスクロールします。通常、この自動スクロールでは、ポイントがウィンドウ縦方向の中央に位置するように画面を移動します。しかし、scroll-conservativelyに小さな数Nを設定しておくと、ポイントが画面から少しだけ（N行未満）はみだすと、 Emacsはポイントを画面内に戻すのに必要な分だけスクロールします。デフォルトでは、scroll-conservativelyは0です。

変数scroll-marginは、ポイントをウィンドウの上端や下端にどれだけ近づけられるかを制限します。その値は画面上での行数です。ポイントがウィンドウの上端や下端からその行数以内にくると、 Emacsはウィンドウを中央に位置付けし直します。デフォルトでは、scroll-marginは0です。

水平スクロール
=======

水平スクロール（horizontal scrolling）とは、すべての行をウィンドウ内で横方向に動かすことです。これにより、左端近くのテキストは表示されなくなります。

C-x <
     カレントウィンドウのテキストを左にスクロールする（scroll-left）。

C-x >
     右にスクロールする（scroll-right）。

ウィンドウが水平方向にスクロールされているときには、テキスト行を継続（see Continuation Lines）しないで切り捨てます。テキストの左側を切り捨てているときは最初の桁に$を表示し、右側を切り捨てているときには最後の桁に$を表示します。

コマンドC-x <（scroll-left）は、選択されたウィンドウを引数Nの桁数だけ左にスクロールします。各行の最初の部分はウィンドウの左端から出てしまいます。引数を指定しないと、ほぼウィンドウ幅（正確には2桁少ない桁数）だけスクロールします。

C-x >（scroll-right）は、同様に右にスクロールします。ウィンドウが（各行がウィンドウの左端から始まっている）通常の表示をしていると、それ以上はスクロールできません。スクロールさせようとしても何も起こりません。つまり、C-x >に与える引数を正確に計算する必要はないのです。十分に大きな引数を指定すれば、通常の表示に戻せます。

水平スクロール（hscroll）モードをオンにすると、自動的に水平スクロールを行います。このモードがオンであると、ポイントが左右端から離れすぎない場所に見えるように Emacsが水平方向にウィンドウをスクロールします。このモードのオン／オフを切り替えるコマンドは、M-x hscroll-modeです。

追従モード
=====

追従（follow）モードは、同じバッファを表示している2つのウィンドウを、 1つの『仮想ウィンドウ』としてスクロールするマイナモードです。追従（follow）モードを使うには、ウィンドウが1つだけのフレームに移動して、 C-x 3を使って左右に並んだ2つのウィンドウに分割してから、 M-x follow-modeと打ちます。これ以後、いずれのウィンドウのバッファでも編集できますし、どちらをスクロールしてもかまいません。もう一方のウィンドウは他方に追従します。

追従（follow）モードをオフにするには、もう一度M-x follow-modeを打ちます。

選択的な表示
======

Emacsには、（指定した）桁数以上字下げしてある行を隠す機能があります。プログラムの一部を概観するのにこの機能を使えます。

行を隠すには、数引数Nを指定してC-x $ （set-selective-display）と打ちます。これにより、N桁以上字下げしてある行は画面から消えます。 1行以上の不可視行に先行する可視行の末尾には、 3つのドット（...）を表示します。この印が不可視行の存在を示す唯一のものです。

コマンドC-nやC-pは、不可視行が存在しないかのように不可視行を飛び越えて移動します。

不可視行は依然としてバッファ内に存在しています。たいていの編集コマンドはそれらを通常と同じように扱うので、隠蔽されたテキスト内にポイントを移動してしまうことも起こりえます。このような場合、カーソルは先行する行の末尾の3つのドットの直後に表示されます。ポイントが可視行の行末の改行文字の直前にあるときには、 3つのドットの直前にカーソルが現れます。

すべての行をふたたび表示するには、引数を指定せずにC-x $を打ちます。

変数selective-display-ellipsesにnilを設定すると、不可視行に先行する可視行の末尾には3つのドットを表示しなくなります。すると、不可視行の存在を示すものは何もありません。この変数を設定すると、自動的にローカルになります。

モード行の付加機能
=========

行番号（line-number）モードがオンであると、ポイントの現在の行番号をモード行に表示します。このモードのオン／オフを切り替えるには、コマンドM-x line-number-modeを使います。通常はオンです。行番号は、バッファの百分率を示すPOSのまえに、行番号であること示す文字Lとともに表示されます。マイナモードやこのコマンドの使用方法について詳しくは、 see Minor Modes。

バッファが非常に大きい（line-number-display-limitの値以上に大きい）場合には、この行番号を表示しません。計算が非常に遅くなるので、バッファが大きい場合にはEmacsは行番号を計算しません。バッファをナロイング（see Narrowing）してある場合、表示される行番号はバッファの参照可能な部分に対するものです。

桁番号（column-number）モードをオンにすると、現在の桁番号も表示できます。このモードでは、Cに続けて現在の桁番号を表示します。このモードのオン／オフを切り替えるには、 M-x column-number-modeと打ちます。

Emcasでは、すべてのモード行に、時刻とシステムの負荷状況を表示できます。この機能をオンにするには、M-x display-timeと打ちます。このときモード行に追加される情報は、通常は、バッファ名のあと、括弧で囲まれたモード名のまえに表示されます。その表示はつぎのようになります。

     HH:MMpm L.LL

ここで、HHとMMは、時分を表し、つねにamかpmが続きます。 L.LLは、システム全体で実行中のプロセスの個数の最近の平均数です。（オペレーティングシステムが情報を提供しなければ、いくつかの内容が消えていることもある。）時刻を24時間表示したければ、変数display-time-24hr-formatにtを設定します。

負荷レベル表示に続く語Mailは、未読のメイルがある場合に表示されます。

テキストの表示方法
=========

Emacsバッファ内のASCII印字文字（8進コードで040から0176）は、それぞれの図形で表示されます。非ASCIIのマルチバイトの印字文字（8進コード0400以上）も同様です。

ASCIIコントロール文字の中には、特別な方法で表示されるものもあります。改行文字（8進コード012）は、新たな行を始めるという形で表示されます。タブ文字（8進コード011）は、つぎのタブストップ位置（通常は8桁ごと）まで移動するという形で表示されます。

その他のASCIIコントロール文字は、通常、カレット（^）に続けてコントロール変種でない文字で表示されます。つまり、control-Aは^Aのように表示されます。

0200から0377までの非ASCII文字は、8進のエスケープシーケンスで表示されます。たとえば、文字コード0243（8進）は、\243と表示されます。しかし、ヨーロッパ向けの表示をオンにしていると、これらのたいていの文字は非ASCII印字文字として扱われ、（端末がこれらの文字を表示できると仮定して）それぞれの図形で表示されます。 See Single-Byte European Support。

表示を制御する変数
=========

本節は、カスタマイズに関する情報のみです。初心者の方は読み飛ばしてください。

変数mode-line-inverse-videoは、（端末が反転表示を扱えると仮定して）モード行を反転表示するかどうかを制御します。 nilは反転表示しないことを意味します。 See Mode Line。 modelineフェイスに前景色を指定していて、しかも、 mode-line-inverse-videoがnil以外であれば、 modelineフェイスのデフォルトの背景色は通常の前景色です。 See Faces。

変数inverse-videoがnil以外である場合、 Emacsは画面上のすべての行を通常の状態から反転表示します。

変数visible-bellがnil以外の場合、 Emacsは、通常は端末のベルを鳴らす場面では、画面全体を点滅します。端末に画面を点滅する機能がなければ、この変数は何の効果もありません。

Emacsを休止したあとで再開した場合、通常Emacsは画面をクリアし、画面全体を再表示します。ページメモリを複数個備えた端末では、termcapの定義を変更して、（それぞれ、Emacsを起動するときと抜けるときに端末に出力される）文字列tiとteでページメモリを切り替えて、 1ページをEmacs用に使い、もう1ページを他の出力用に使うようにできます。そして、変数no-redraw-on-reenterにnil以外を設定します。こうすると、Emacsは、再開時には最後に出力した内容が画面ページに入っているものと仮定します。

変数echo-keystrokesは、複数個の文字キーのエコーを制御します。設定する値は、エコーを開始するまでの待機時間の秒数です。ゼロを指定するとエコーしません。 See Echo Area。

変数ctl-arrowにnilを設定すると、改行とタブを除いて、バッファ内のコントロール文字を 8進のエスケープシーケンスで表示します。変数ctl-arrowの値を変更すると、この変数はカレントバッファにローカルになります。それまでは、デフォルトの値が使われます。デフォルトの初期値はtです。 See Display Tables (The Emacs Lisp Reference Manual)。

通常、バッファ内のタブ文字は、つぎのタブストップ位置までの空白として表示され、タブストップは8個分の空白と同じ間隔です。タブ1個あたりの空白の文字数は、変数tab-widthで制御します。この変数もctl-arrowと同様に、変更するとバッファにローカルになります。バッファ内のタブ文字をどのように表示するかと、コマンドとしてのTABの定義とは無関係であることに注意してください。変数tab-widthの値は1以上1000以下の整数である必要があります。

変数truncate-linesにnil以外を設定すると、テキストの各行は表示上は画面の1行を占有します。テキスト行が長すぎる場合は、画面に収まる範囲だけを表示します。一方、truncate-linesにnilを設定すると、長いテキスト行は、画面上では2行以上にわたってテキスト行の表示に必要なだけの行数で表示されます。 See Continuation Lines。変数truncate-linesの値を変更すると、カレントバッファにローカルになります。それまでは、デフォルトが使われます。デフォルトの初期値はnilです。

変数truncate-partial-width-windowsにnil以外を設定すると、画面やフレームの幅に満たないウィンドウでは、テキストの表示方法はtruncate-linesの値とは無関係に、継続行ではなく切り捨てて表示します。左右に並べたウィンドウに関しては、see Split Window。 Display (The Emacs Lisp Reference Manual)も参照してください。

変数baud-rateは、Emacsにとっての端末の出力速度を保持します。この変数の値を設定したとしても、実際のデータ転送速度を変更できるわけではなく、この値はパディングの計算などに用いられます。さらに、ウィンドウシステムを使用している場合であっても、画面の一部をスクロールするのか、再表示するのかの決定にも影響します。（ウィンドウシステムには正しい『出力速度』がないにしても、スクロール／再表示を調整できるようにこのように設計してある。）

どんな文字コードの表示方法も、表示テーブルを用いてカスタマイズできます。 See Display Tables (The Emacs Lisp Reference Manual)。