[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

14. 複数のウィンドウ

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Windows"
"emacs/複数のウィンドウ"へのコメント(無し)

Emacsは、フレームを2つ以上のウィンドウに分割できます。 複数のウィンドウは、異なるバッファの一部分、あるいは、 1つのバッファの異なる部分を表示することができます。 複数フレームはつねに複数ウィンドウを意味します。 というのは、各フレームはそれ独自のウィンドウの集合を持つからです。 各ウィンドウはたった1つのフレームだけに属します。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

14.1 Emacsウィンドウの概念

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Basic%20Window"
"emacs/Emacsウィンドウの概念"へのコメント(無し)

各Emacsウィンドウは、いつでも1つのEmacsバッファを表示します。 1つのバッファは複数のウィンドウに表示できます。 その場合、そのテキストの変更は、そのバッファを表示している すべてのウィンドウで表示されます。 しかし、同じバッファを表示している各ウィンドウでは バッファの異なる部分を表示することができます。 なぜなら、各ウィンドウはそれ自身のポイント値を持つからです。

どんなときでも、1つのウィンドウだけが選択されたウィンドウです。 そのウィンドウに表示されているバッファがカレントバッファです。 端末のカーソルは、そのウィンドウのポイント位置を示します。 別の各ウィンドウにもそれぞれ同じようにポイント位置がありますが、 端末にはカーソルは1つしかないので、 それらの位置を示す方法がありません。 Xウィンドウシステムで複数フレームを表示しているときには、 各フレームには、そのフレームで選択されたウィンドウにカーソルがあります。 選択されているフレームのカーソルは塗り潰されている矩形で、 それ以外のフレームのカーソルは中空の矩形です。

ポイントを移動するコマンドは、選択されているEmacsウィンドウのポイント 値に対してだけ影響します。 たとえ同じバッファを表示しているとしても、 他のEmacsウィンドウのポイント値は変更しません。 選択しているウィンドウで選択しているバッファを変更する C-x bといったコマンドでも同様です。 他のウィンドウには少しも影響しません。 しかし、別のウィンドウを選択してそのバッファを切り替える C-x 4 bのようなコマンドもあります。 さらに、(たとえば)C-h fdescribe-function)や C-x C-blist-buffers)などを含む ウィンドウに情報を表示するコマンドは、 選択されているウィンドウに影響することなく、 選択されていないウィンドウのバッファを切り替えます。

複数のウィンドウが同じバッファを表示するとき、 異なるリージョンを持つことができます。 というのは、各ウィンドウは、それぞれ異なるポイント値を持てるからです。 しかしながら、各バッファにはたった1つのマーク位置しかないため、 マークの値はすべて同じになります。

各ウィンドウにはそれ専用のモード行があり、 そこにはウィンドウに表示しているバッファの名前、修正状態、 バッファのメジャーモード、バッファのマイナモードを表示します。 モード行に関して詳しくは、See 節 1.3 モード行



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

14.2 ウィンドウの分割

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Split%20Window"
"emacs/ウィンドウの分割"へのコメント(無し)

C-x 2
選択されているウィンドウを上下2つに分割する。 (split-window-vertically)。
C-x 3
選択されているウィンドウを左右2つに分割する (split-window-horizontally)。
C-Mouse-2
ウィンドウのモード行やスクロールバー上の位置で、 そのウィンドウを分割する。

コマンドC-x 2split-window-vertically)は、 選択されているウィンドウを上下2つのウィンドウに分割します。 どちらのウィンドウも同じポイント値、同じバッファを表示するところから 始まります。 デフォルトでは2つのウィンドウは、 それぞれ、分割されるウィンドウの半分の高さになります。 数引数は上のウィンドウの行数を指定します。

C-x 3split-window-horizontally)は、 選択されているウィンドウを左右2つのウィンドウに分割します。 数引数は左側のウィンドウの桁数を指定します。 2つのウィンドウはスクロールバーで分けられます。 画面幅に満たないウィンドウのモード行は、切り詰められます。 Emacsが強調表示を扱えない端末では、 切り詰めたモード行が反転表示されない場合があります。

モード行やスクロールバーでC-Mouse-2をクリックすることで、 ウィンドウを左右や上下に分割できます。 分割する線はクリックした位置を通ります。 モード行でクリックすると、新しいスクロールバーはクリックした点上を通ります。 スクロールバーでクリックすると、 分割したウィンドウのモード行はクリックした位置に並びます。

ウィンドウの幅が十分でないと、長すぎて行に入りきらないテキスト行が 多くなります。 これらの行すべてを継続すると混乱してしまうかもしれません。 変数truncate-partial-width-windowsnil以外を設定すると、 画面幅に満たないすべてのウィンドウで切り詰めを強制できます。 これは、表示されているバッファやtruncate-linesの値とは独立しています。 See 節 3.8 継続行

水平スクロールは左右に並べたウィンドウでよく使われます。 See 節 9. 画面の制御

split-window-keep-pointの値がnil以外(デフォルト)ならば、 C-x 2で分割した2つのウィンドウは、 分割前のウィンドウのポイント値を継承します。 つまり、スクロールを避けられません。 この変数がnilならば、 C-x 2は、画面上のテキストが移動しないように、 各ウィンドウで見えている部分にポイントを移動しようと試みます。 また、分割前にカーソルがあった行を表示しているウィンドウを選択します。 遅い端末では後者の動作を好むユーザーもいます。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

14.3 別のウィンドウの使い方

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Other%20Window"
"emacs/別のウィンドウの使い方"へのコメント(無し)

C-x o
別のウィンドウを選択する(other-window)。 (小文字の)oであってゼロではない。
C-M-v
つぎのウィンドウをスクロールする(scroll-other-window)。
M-x compare-windows
選択されているウィンドウのテキストとつぎのウィンドウのテキストで 一致していないつぎの箇所を探す。
Mouse-1
ウィンドウのモード行でMouse-1をクリックすると、 そのウィンドウを選択するがポイントは移動しない(mouse-select-window)。

別のウィンドウを選択するには、そのモード行でMouse-1をクリックします。 キーボードからは、C-x oother-window)で ウィンドウを切り替えられます。 これは「other」のoであってゼロではありません。 2つ以上のウィンドウがあるときは、このコマンドはすべてのウィンドウを、 一般的には、上から下へ、左から右へ巡回します。 もっとも右下のウィンドウのつぎは、左上隅にあるウィンドウに戻ります。 数引数は、ウィンドウを巡回する回数を意味します。 負の引数では逆順に巡回します。 ミニバッファを使っているときには、 ミニバッファが巡回の最後のウィンドウになります。 ミニバッファウィンドウから別のウィンドウに切り替えて、 あとで戻ってきて、ミニバッファ引数が要求しているものを与えてから終了できます。 See 節 4.2 ミニバッファでの編集

通常のスクロールコマンド(see 節 9. 画面の制御)は、 選択されているウィンドウのみに作用しますが、 つぎのウィンドウをスクロールするコマンドが1つあります。 C-M-vscroll-other-window)は、 C-x oが選択するウィンドウをスクロールします。 C-vのように正負の引数を取ります。 (ミニバッファでは、ミニバッファヘルプがあると、 標準の巡回順でつぎのウィンドウではなくて、 ミニバッファヘルプを表示しているウィンドウをスクロールする。)

コマンドM-x compare-windowsは、 2つのウィンドウで見えている2つのファイル、つまり、バッファを比較して、 一致しないつぎの箇所へ移動します。 詳細は、See 節 12.9 ファイルの比較



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

14.4 別のウィンドウに表示する

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Pop%20Up%20Window"
"emacs/別のウィンドウに表示する"へのコメント(無し)

C-x 4は、(ウィンドウが1つだけならば分割して) 別のウィンドウを選択して、そのウィンドウでバッファを選択するコマンドの プレフィックスキーです。 異なるC-x 4コマンドは、異なる方法で選択するバッファを探します。

C-x 4 b bufname RET
別のウィンドウでバッファbufnameを選択する。 このコマンドは、switch-to-buffer-other-windowを実行する。
C-x 4 C-o bufname RET
別のウィンドウでバッファbufnameを表示するが、 そのウィンドウもそのバッファも選択しない。 このコマンドは、display-bufferを実行する。
C-x 4 f filename RET
ファイルfilenameを訪問して、 別のウィンドウでそのバッファを選択する。 このコマンドは、find-file-other-windowを実行する。 see 節 12.2 ファイルを訪問する
C-x 4 d directory RET
別のウィンドウでディレクトリdirectoryに対する diredバッファを選択する。 このコマンドは、dired-other-windowを実行する。 see 節 26. ディレクトリエディタdired
C-x 4 m
別のウィンドウでメイルメッセージを作成し始める。 このコマンドは、mail-other-windowを実行する。 これは、同じウィンドウを使うC-x mに類似したもの。 (see 節 24. メイルの送信)。
C-x 4 .
別のウィンドウで現在のタグテーブルのタグを探す。 このコマンドは、find-tag-other-windowを実行するが、 M-.の複数ウィンドウ向けの変種 (see 節 20.13 タグテーブル)。
C-x 4 r filename RET
ファイルfilenameを読み出し専用で訪問し、 別のウィンドウでそのバッファを選択する。 このコマンドは find-file-read-only-other-windowを実行する。 see 節 12.2 ファイルを訪問する



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

14.5 同じウィンドウへの強制表示

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Force%20Same%20Window"
"emacs/同じウィンドウへの強制表示"へのコメント(無し)

ある種のEmacsコマンドは、特別な内容を持つ特有のバッファに切り替えます。 たとえば、 M-x shellは、`*Shell*'という名前のバッファに切り替えます。 慣習では、これらのすべてのコマンドは、 別のウィンドウにバッファを立ち上げるようにプログラムされています。 しかし、これらのバッファのいくつかを選択されている ウィンドウに表示するように指定できます。

バッファ名をリストsame-window-buffer-namesに追加すると、 そういったコマンドは、選択されているウィンドウで特定のバッファに切り替えます。 たとえば、そのリストに要素"*grep*"を追加すれば、 grepコマンドは、選択されているウィンドウにその出力バッファを表示します。

same-window-buffer-namesのデフォルト値はnilではありません。 (古いEmacsパッケージが使うものも含めて) バッファ名、`*info*'、`*mail*'、`*shell*'を指定してあります。 このため、M-x shellが通常は選択されているウィンドウで `*shell*'バッファに切り替えるのです。 もしこの要素をsame-window-buffer-namesから削除すると、 M-x shellのふるまいは変わります。 かわりに別のウィンドウでバッファを立ち上げます。

これらのバッファを、より一般的に変数same-window-regexpsで指定できます。 この変数には、正規表現のリストを設定します。 そうすると、正規表現の1つに一致するバッファはどれも、 選択されているウィンドウでバッファを切り替えて表示します。 (繰り返すが、これは、普通は別のウィンドウに 表示されるバッファのみにあてはまる。) この変数のデフォルト値には、telnetバッファとrloginバッファが指定されています。

類似の機能で、独立したフレームに表示させるバッファを指定することができます。 See 節 15.9 特別なバッファフレーム



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

14.6 ウィンドウの削除と再配置

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=emacs&node=Change%20Window"
"emacs/ウィンドウの削除と再配置"へのコメント(無し)

C-x 0
選択されているウィンドウを削除する(delete-window)。 このキー列の最後の文字はゼロ。
C-x 1
選択されているウィンドウを除いて、 選択されているフレームのウィンドウすべてを削除する (delete-other-windows)。
C-x 4 0
選択されているウィンドウを削除し、 その中に表示されているバッファを削除する (kill-buffer-and-window)。 このキー列の最後の文字はゼロ。
C-x ^
選択されているウィンドウの高さを大きくする(enlarge-window)。
C-x }
選択されているウィンドウの幅を広くする(enlarge-window-horizontally)。
C-x {
選択されているウィンドウの幅を狭くする(shrink-window-horizontally)。
C-x -
バッファがそんなに多くの行を必要としないならウィンドウを縮める (shrink-window-if-larger-than-buffer)。
C-x +
すべてのウィンドウを同じ高さにする(balance-windows)。
Drag-Mouse-1
ウィンドウのモード行をMouse-1で上下にドラッグして、 ウィンドウの高さを変更する。
Mouse-2
ウィンドウのモード行でMouse-2をクリックすると、 フレーム内のそのウィンドウ以外のすべてのウィンドウを削除する (mouse-delete-other-windows)。
Mouse-3
ウィンドウのモード行でMouse-3をクリックすると、 そのウィンドウを削除する (mouse-delete-window)。

ウィンドウを削除するには、C-x 0delete-window)と打ちます (これはゼロ)。 削除されたウィンドウが占めていた場所は、隣接のウィンドウに与えられます。 (ただし、ミニバッファのウィンドウを使っている場合でも、 ミニバッファのウィンドウには与えない。) ウィンドウを一度削除すると、その属性は失われます。 ウィンドウの構成情報を回復する以外にウィンドウをもとに戻す方法はありません。 ウィンドウを削除しても、そこに表示していたバッファには何の影響もありません。 バッファは存在し続け、どのウィンドウへでもC-x bで選択できます。

C-x 4 0kill-buffer-and-window)は、 C-x 0よりも強いコマンドです。 これは、カレントバッファを削除し、そこで選択されていたウィンドウを削除します。

C-x 1delete-other-windows)は、 別の意味でさらに強力です。 選択されているウィンドウ(とミニバッファ)を除いて、 すべてのウィンドウを削除します。 選択されているウィンドウは、エコー領域を除いたフレーム全体を 使うように広がります。

モード行でMouse-2をクリックしても、そのウィンドウを削除できます。 モード行でMouse-3をクリックすると、そのウィンドウを除いて、 フレーム内のすべてのウィンドウを削除します。

ウィンドウの高さを調節するもっとも簡単な方法は、マウスを使うことです。 モード行でMouse-1を押し下げてモード行を上下にドラッグすると、 ウィンドウの高さを変更できます。

上下に接しているウィンドウの分割を再調整するには、 C-x ^enlarge-window)を使います。 このコマンドは、現在選択されているウィンドウを1行だけ、あるいは、 数引数分の行数だけ大きくします。 負の引数を指定すると、選択されているウィンドウは小さくなります。 C-x }enlarge-window-horizontally)は、 選択されているウィンドウを指定された桁数分だけ広くします。 C-x {shrink-window-horizontally)は、 選択されているウィンドウを指定された桁数分だけ狭くします。

ウィンドウを大きくするとき、その場所は隣のウィンドウから取ります。 その結果、ウィンドウが小さくなりすぎるとそのウィンドウは削除され、 その場所を隣接するウィンドウに与えます。 最小の大きさは変数window-min-heightwindow-min-widthで指定します。

コマンドC-x -shrink-window-if-larger-than-buffer)は、 選択されているウィンドウの高さが、表示しているバッファのテキスト全体を 表示するために必要な高さよりも大きい場合には、 その高さを縮めます。 余った行はフレーム内の他のウィンドウに与えられます。

選択されているフレーム内のすべてのウィンドウの高さをすべて同じにするには、 C-x +balance-windows)を使えます。

ミニバッファのテキストにちょうど合うように ミニバッファウィンドウの大きさを自動的に変更する ミニバッファリサイズ(resize-minibuffer)モードについては、 See 節 4.2 ミニバッファでの編集


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]