[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
本章では, Emacsのウィンドウに関したほとんどの関数と変数について述べます. ウィンドウにどのようにテキストが表示されるかに関しては, Emacsの画面表示を参照してください.
27.1 Emacsウィンドウの基本概念 | Basic information on using windows. | |
27.2 ウィンドウの分割 | Splitting one window into two windows. | |
27.3 ウィンドウの削除 | Deleting a window gives its space to other windows. | |
27.4 ウィンドウの選択 | The selected window is the one that you edit in. | |
27.5 ウィンドウの巡回順序 | Moving around the existing windows. | |
27.6 バッファとウィンドウ | Each window displays the contents of a buffer. | |
27.7 ウィンドウへのバッファの表示 | Higher-lever functions for displaying a buffer and choosing a window for it. | |
27.8 表示ウィンドウを選ぶ | How to choose a window for displaying a buffer. | |
27.9 ウィンドウとポイント | Each window has its own location of point. | |
27.10 ウィンドウの開始位置 | The display-start position controls which text is on-screen in the window. | |
27.11 垂直スクロール | Moving text up and down in the window. | |
27.12 水平スクロール | Moving text sideways on the window. | |
27.13 ウィンドウサイズ | Accessing the size of a window. | |
27.14 ウィンドウサイズの変更 | Changing the size of a window. | |
27.15 座標とウィンドウ | Converting coordinates to windows. | |
27.16 ウィンドウ構成 | Saving and restoring the state of the screen. | |
27.17 ウィンドウのスクロールとサイズ変更向けのフック | Hooks for scrolling, window size changes, redisplay going past a certain point, or window configuration changes. |
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
Emacsのウィンドウ(window)は, バッファを表示するスクリーン上の物理的な領域のことです. この用語は, Emacs Lispにおいて, 当該物理領域を表す Lispオブジェクトを意味するためにも使います. どちらの意味かは文脈から明らかなはずです.
Emacsではウィンドウをフレームにまとめています. フレームは, Emacsが使えるスクリーンの領域を表します. 各フレームには少なくとも1つのウィンドウがつねにありますが, フレームは上下や左右に重なり合わない複数のEmacsのウィンドウに分割できます.
ある時点では, 各フレームにはフレームの選択されているウィンドウと
区別されるウィンドウがたった1つだけあります.
フレームのカーソルはそのようなウィンドウに現れます.
ある時点では, 1つのフレームが選択されているフレームであり,
当該フレームで選択されているウィンドウが選択されているウィンドウです.
選択されているウィンドウのバッファが,
(set-buffer
を使った場合を除いて)普通はカレントバッファです.
See section カレントバッファ.
実用上, ウィンドウは, それがフレームに表示されている期間だけ存在します. フレームからいったん取りさると, (ウィンドウへの参照が残っているとしても) ウィンドウは実質的には削除され使えません. 保存したウィンドウ構成を復元する以外に, スクリーンから消えたウィンドウを戻す方法はありません. (see section ウィンドウの削除. )
各ウィンドウにはつぎの属性があります.
複数のバッファを同時に見られるようにユーザーは複数のウィンドウを作ります. さまざまな理由でLispライブラリは複数のウィンドウを使いますが, そのほとんどは, 関連する情報を表示するためです. たとえば, rmailでは, あるウィンドウのサマリバッファで移動すると, 別のウィンドウでは対応するメッセージを表示します.
Emacsにおける『ウィンドウ』の意味は, Xのような汎用目的のウィンドウシステムにおける意味に似ていますが, 同一ではありません. Xウィンドウシステムは, スクリーン上にXのウィンドウを配置します. Emacsは, 1つか複数のXのウィンドウをフレームとして使い, それらをEmacsのウィンドウに分割します. 文字端末でEmacsを使うと, Emacsは端末のクリーン全体を1つのフレームとして扱います.
ほとんどのウィンドウシステムは, 任意に重ね合わさったウィンドウを扱えます. 対照的に, Emacsのウィンドウはタイル型です. つまり, 互いに重なり合うことはなく, スクリーンやフレームの全面に敷き詰められます. Emacsが新たなウィンドウを作成する方法や ウィンドウサイズの変更方法に起因するのですが, Emacsのフレームを任意の形にウィンドウで敷き詰めることは, 実際には必ずしも可能であるとは限りません. ウィンドウの分割とSee section ウィンドウサイズ.
ウィンドウのバッファの内容がどのようにウィンドウに表示されるかについては, See section Emacsの画面表示.
この関数は, objectがウィンドウであればt
を返す.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ここで述べる関数は, ウィンドウを2つに分割するための基本関数です.
上位レベルの2つの関数, pop-to-buffer
とdisplay-buffer
も
ウィンドウを分割しますが,
つねに分割するとは限りません(see section ウィンドウへのバッファの表示).
ここに述べる関数は, 引数にはバッファを受け付けません. 分割されたウィンドウの2つの『部分』には, 分割前に表示されていたのと 同じバッファが始めは表示されます.
この関数はwindowを2つのウィンドウに分割する. もとのウィンドウwindowは, 選択されているウィンドウであり続けるが, 以前のスクリーン領域の一部を占めるだけである. 残りの部分は新たに作成されたウィンドウが占め, そのウィンドウがこの関数の値として返される.
horizontalがnil
以外であると, windowは左右に分かれる.
もとのウィンドウwindowは左端のsizeコラムに留まり,
残りのコラムは新たなウィンドウに与えられる.
さもなければ, ウィンドウは上下に分かれ,
windowは上側のsize行に留まり,
残りの行は新たなウィンドウに与えられる.
したがって, もとのウィンドウは左側か上側にあり,
新たなウィンドウは右側か下側にある.
windowを省略したりnil
であると,
選択されているウィンドウを分割する.
sizeを省略したりnil
であると,
windowを均等に分ける.
(余分な行は新たなウィンドウに与える. )
split-window
が対話的に呼び出されると,
すべての引数はnil
である.
つぎの例では, 50行×80コラムのスクリーン上の1つのウィンドウを分割する.
(setq w (selected-window)) ⇒ #<window 8 on windows.texi> (window-edges) ; 順に ⇒ (0 0 80 50) ; 左端--上端--右端--下端 ;; 作成したウィンドウを返す
(setq w2 (split-window w 15))
⇒ #<window 28 on windows.texi>
(window-edges w2)
⇒ (0 15 80 50) ; 下側のウィンドウの上端は15行目
(window-edges w)
⇒ (0 0 80 15) ; 上側のウィンドウ
|
スクリーンはつぎのようになる.
┌──────┐ │ │ 0行目 │ w │ │ │ ├──────┤ │ │15行目 │ w2 │ │ │ └──────┘ 50行目 コラム0 コラム80 |
つぎに上側のウィンドウを左右に分割する.
(setq w3 (split-window w 35 t)) ⇒ #<window 32 on windows.texi> (window-edges w3)
⇒ (35 0 80 15) ; 左端は35コラム目
(window-edges w)
⇒ (0 0 35 15) ; 右端は35コラム目
(window-edges w2)
⇒ (0 15 80 50) ; 下側のウィンドウは未変更
|
スクリーンはつぎのようになる.
コラム35 ┌─┬────┐ │ │ │ 0行目 │w│ w3 │ │ │ │ ├─┴────┤ │ │15行目 │ w2 │ │ │ └──────┘ 50行目 コラム0 コラム80 |
通常, Emacsは左右に並んだウィンドウの境界を スクロールバー(see section Scroll Bars)か 文字‘|’で表す. 表示テーブルで境界に別の文字を指定できる. 表示テーブルを参照.
この関数は, 選択されているウィンドウを上下に2つに分割する. 上側が選択されているウィンドウのままで, size行の大きさになる. (sizeが負であると, 下側のウィンドウが- size行になり, 上側のウィンドウは残りになる. しかし, それでも上側が選択されているウィンドウである. )
この関数はsplit-window
の単なるインターフェイスである.
その完全な関数定義はつぎのとおりである.
(defun split-window-vertically (&optional arg) "Split current window into two windows, …" (interactive "P") (split-window nil (and arg (prefix-numeric-value arg)))) |
この関数は, 選択されているウィンドウを左右に2つに分割し, 選択されているウィンドウにはsizeコラム残す.
この関数はsplit-window
の単なるインターフェイスである.
split-window-horizontally
の完全な関数定義は
(説明文字列を除けば)つぎのとおりである.
(defun split-window-horizontally (&optional arg) "Split selected window into two windows, side by side..." (interactive "P") (split-window nil (and arg (prefix-numeric-value arg)) t)) |
この関数は, ウィンドウがたった1つしかなければnil
以外を返す.
引数no-miniがnil
以外であると,
ミニバッファが活性であってもそれを数えないことを意味する.
さもなければ, ミニバッファが活性であればそれも総ウィンドウ個数に数えて
1と比較する.
引数all-framesは, どのフレームを対象にするかを指定する. 指定できる値とその意味はつぎのとおりである.
nil
選択されているフレームのウィンドウに加えて, ミニバッファがどこに置かれていようと 当該フレームが使っているミニバッファを数える.
t
既存のすべてのフレームのウィンドウを数える.
visible
すべての可視フレームのすべてのウィンドウを数える.
すべての可視フレームやアイコンになっているフレームの すべてのウィンドウを数える.
選択されているフレームだけでウィンドウを正確に数える.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ウィンドウを削除するある種の関数を呼び出して ウィンドウを削除しない限り, ウィンドウはそのフレームに表示され続けます. 削除されたウィンドウがスクリーンに現れることはありませんが, それを参照するものがある限りLispオブジェクトととしては 存在し続けます. 保存したウィンドウ構成(see section ウィンドウ構成)を復元する以外には, ウィンドウの削除は取り消せません. ウィンドウ構成を復元すると, その構成に含まれないウィンドウはすべて削除されます.
ウィンドウを削除すると, それが使っていた場所は 近接する兄弟ウィンドウの1つに与えられます.
この関数は, windowが削除されているとnil
を返し,
さもなければt
を返す.
警告:
削除されたウィンドウを正しいものとして使うと,
誤った情報や重大なエラーを引き起こす.
この関数は, ディスプレイからwindowを取りさり, nil
を返す.
windowを省略すると, 選択されているウィンドウを削除する.
delete-window
を呼び出したときにたった1つのウィンドウしかないと
エラーを通知する.
この関数は, windowのフレームにある他のウィンドウを削除して
windowを当該フレームで唯一のウィンドウにする.
windowを省略したりnil
であると,
選択されているウィンドウをデフォルトで使う.
これはnil
を返す.
この関数は, bufferを表示しているすべてのウィンドウを削除する. bufferを表示しているウィンドウがなければなにもしない.
delete-windows-on
はフレームを1つ1つ処理する.
フレームに異なるバッファを表示しているウィンドウが複数ある場合,
それらのうちでbufferを表示しているものを削除し,
他のものは空いた領域を埋めるために拡張される.
あるフレームのすべてのウィンドウ(たった1つのウィンドウである場合も含む)
がbufferを表示している場合, 当該フレームは,
other-buffer
で選ばれる別のバッファを表示する
1つのウィンドウだけになる.
see section バッファリスト.
引数frameは, どのフレームを対象にするかを指定する.
この関数は, すべてのウィンドウを走査する他の関数と同じようには
frameを使わない.
特に, t
とnil
の値の意味は他の関数とは逆である.
以下に詳細を示す.
nil
であると, すべてのフレームを対象にする.
t
であると, 選択されているフレームを対象にする.
visible
であると, すべての可視フレームを対象にする.
この関数はつねにnil
を返す.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ウィンドウを選択すると, 当該ウィンドウのバッファがカレントバッファになり, カーソルがそのウィンドウに現れます.
この関数は, 選択されているウィンドウを返す. カーソルが表示され多くのコマンドが作用するウィンドウがそれである.
この関数は, windowを選択されているウィンドウにする. すると, カーソルは(再表示すると)windowに現れる. windowに表示されているバッファがただちにカレントバッファになる.
戻り値はwindowである.
(setq w (next-window)) (select-window w) ⇒ #<window 65 on windows.texi> |
このマクロは, 選択されているウィンドウを記録して, formsを順に実行し, もとの選択されているウィンドウに戻す.
このマクロは, ウィンドウサイズ, 配置, 内容に関して いっさいなにも保存したり復元しないので, formsがそれらを変更するとその変更は持続する.
ある時点で, 各フレームにはフレームの選択されているウィンドウがある. このマクロは, 選択されているウィンドウだけを保存し, 他のフレームについてはなにも保存しない. formsが別のフレームを選択して そのフレームの選択されているウィンドウを変更すると, その変更は持続する.
以下の関数は, さまざま条件でスクリーン上のウィンドウの1つを選びます.
この関数は, もっとも昔に『使われた』 (つまり選択されていた)ウィンドウを返す. 選択されているウィンドウはつねにもっとも最近に使われたウィンドウである.
ウィンドウがたった1つであると, 選択されているウィンドウが もっとも昔に使われたウィンドウであることもありうる. 新たに作成されたウィンドウは, 選択されるまではもっとも昔に 使われたウィンドウになる. ミニバッファ用ウィンドウは候補にはならない.
引数frameは, どのウィンドウを対象とするかを制御する.
nil
であると, 選択されているフレームのウィンドウを対象とする.
t
であると, すべてのフレームのウィンドウを対象とする.
visible
であると,
すべての可視フレームのウィンドウを対象とする.
この関数は, もっとも大きな領域(高さ×幅)のウィンドウを返す. 左右に並んだウィンドウがなければ, これがもっとも行数を持つウィンドウである. ミニバッファ用ウィンドウは候補にはならない.
同じ大きさのウィンドウが2つある場合, この関数は, 選択されているウィンドウから始めて ウィンドウの巡回順序(次節参照)で最初のウィンドウを返す.
引数frameは, ウィンドウのどのような集まりを対象にするかを指定する.
うえのget-lru-window
を参照.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
つぎのウィンドウを選択するためにコマンドC-x o(other-window
)を
使うと, スクリーン上のすべてのウィンドウをある巡回順序で巡ります.
ウィンドウのある構成において, この順序は変わりません.
これをウィンドウの巡回順序(cyclic ordering of windows)と呼びます.
この順番は一般に上から下, 左から右になります. しかし, ウィンドウを分割した順番に依存して, 下や右が最初になることもあります.
最初に上下に分割してつぎに左右に分割すると, 順番は, フレームの上側で左から右, フレームのその下では左から右 といった具合になります. 最初に左右に分割すると, 順番は, フレームの左側で上から下といった具合になります. 一般に, ウィンドウ木のあるレベルで分割された各兄弟の中では, 順番は, 左から右, あるいは, 上から下になります.
この関数は, ウィンドウの巡回順序においてwindowのつぎの ウィンドウを返す. これは, windowが選択されているときに C-x oが選択するであろうウィンドウである. windowが唯一の可視ウィンドウであると, この関数はwindowを返す. windowを省略すると, デフォルトは選択されているウィンドウである.
引数minibufの値は, ミニバッファを
ウィンドウの順序に含めるかどうかを決定する.
minibufがnil
であると,
ミニバッファが活性であるときにはミニバッファを含める.
これはC-x oのふるまいである.
(ミニバッファが使われているあいだは,
ミニバッファ用ウィンドウは活性である.
see section ミニバッファ. )
minibufがt
であると,
ミニバッファが活性でなくても巡回順序にミニバッファ用ウィンドウを含める.
minibufがt
でもnil
でもないと,
活性であってもミニバッファ用ウィンドウを含めない.
引数all-framesは, どのフレームを対象にするかを指定する. 可能な値とその意味を以下に示す.
nil
windowのフレームのすべてのウィンドウに加えて, ミニバッファがどこに置かれていようと 当該フレームが使っているミニバッファを対象にする.
t
既存のすべてのフレームのすべてのウィンドウを対象にする.
visible
すべての可視フレームのすべてのウィンドウを対象にする. (結果が有用であるためには, 可視フレームにwindowがあること)
すべての可視フレームやアイコンになっているフレームの すべてのウィンドウを対象にする.
windowのフレームだけのウィンドウを正確に対象にする.
つぎの例では, 2つのウィンドウがあり, どちらもバッファ‘windows.texi’を表示していると仮定する.
(selected-window) ⇒ #<window 56 on windows.texi> (next-window (selected-window)) ⇒ #<window 52 on windows.texi> (next-window (next-window (selected-window))) ⇒ #<window 56 on windows.texi> |
この関数は, ウィンドウの巡回順序においてwindowのまえの
ウィンドウを返す.
他の引数は, next-window
と同様に,
どのようなウィンドウを巡回に含めるかを指定する.
この関数は, ウィンドウの巡回順序においてcount番目うしろの
ウィンドウを選択する.
countが負であると, 巡回順序において
-count番目まえのウィンドウに戻る.
この関数はnil
を返す.
対話的に呼び出すと, countは数値前置引数である.
この関数は, 各ウィンドウごとに当該ウィンドウを唯一の引数として procを呼び出してすべてのウィンドウを巡る.
省略可能な引数minibufとall-framesは,
走査するウィンドウの集まりを指定する.
詳しくは上記のnext-window
を参照.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
本節では, ウィンドウを調べたり, 正確に制御してウィンドウにバッファを表示する低レベルの関数について述べます. 使用するウィンドウを探したりそれにバッファを指定する関連する関数については, そこに述べた関数は本節の関数より簡単に使えますが, それらはウィンドウを選んだり作ったりするときに発見的手法を使います. 完全に制御する必要があるときには, 本節の関数を使います.
この関数は, windowの内容としてbuffer-or-nameを表示するようにする.
この関数はnil
を返す.
これは, ウィンドウに表示するバッファを切り替える
もっとも基本の基本関数であり,
他の切り替え関数はこの関数を呼び出す.
(set-window-buffer (selected-window) "foo") ⇒ nil |
この関数は, windowに表示しているバッファを返す. windowを省略すると, この関数は選択されているウィンドウのバッファを返す.
(window-buffer) ⇒ #<buffer windows.texi> |
この関数は, 現在buffer-or-nameを表示しているウィンドウを返す.
そのようなウィンドウがなければnil
を返す.
そのようなウィンドウが複数ある場合,
ウィンドウの巡回順序において選択されているウィンドウから始めて
最初にみつかったウィンドウを返す.
see section ウィンドウの巡回順序.
引数all-framesは, どのウィンドウを対象とするかを制御する.
nil
であると, 選択されているフレームのウィンドウを対象とする.
t
であると, すべてのフレームのウィンドウを対象とする.
visible
であると,
すべての可視フレームのすべてのウィンドウを対象にする.
この関数は, 現在buffer-or-nameを表示している すべてのウィンドウのリストを返す.
省略可能な2つの引数は, next-window
(see section ウィンドウの巡回順序)の
省略可能な引数と同様に働き,
get-buffer-window
の省略可能な単一の引数と同じではない.
get-buffer-window
を他の関数と互換性があるように
将来変更すべきなのであろう.
引数all-framesは, どのウィンドウを対象とするかを制御する.
nil
であると, 選択されているフレームのウィンドウを対象とする.
t
であると, すべてのフレームのウィンドウを対象とする.
visible
であると,
すべての可視フレームのすべてのウィンドウを対象にする.
この変数は, バッファがウィンドウで見えるようになった最後の時刻を記録する.
この変数は各バッファでつねにバッファローカルであり,
set-window-buffer
は, 呼ばれるたびに
指定されたバッファのこの変数に(current-time)
を設定する
(see section 時刻).
バッファが初めて作られると, buffer-display-time
は値nil
で始まる.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
本節では, ウィンドウを自動的に選びそれに指定したバッファを表示する
便利な関数について述べます.
これらの関数は, ある状況では, 既存のウィンドウを分割します.
ウィンドウを選ぶ際の発見的手法を制御する変数についても述べます.
より正確に制御するための低レベルの関数については,
これらの関数はすべてset-window-buffer
を呼び出して動作します.
バッファをカレントバッファにしてLispプログラムで参照したり変更できるように
するためには, 本節の関数を使わないでください.
これらはその目的には強力すぎます.
ウィンドウのバッファの表示をユーザーにとっては迷惑で驚くようなものに
変更してしまうからです.
そのかわりに, ウィンドウのバッファの表示には影響せずに
バッファをプログラムから参照するためにカレントバッファにする
set-buffer
とsave-current-buffer
(see section カレントバッファ)を
使います.
この関数は, buffer-or-nameをカレントバッファにし,
さらに, 選択されているウィンドウに当該バッファを表示する.
つまり, 人間が当該バッファを見ることができるようになり,
以降のキーボードコマンドは当該バッファに適用される.
buffer-or-nameをカレントバッファにするが
選択されているウィンドウには表示しないset-buffer
と比較してほしい.
see section カレントバッファ.
buffer-or-nameが既存のバッファを指定しなければ,
その名前の新たなバッファが作成される.
新たなバッファのメジャーモードは変数default-major-mode
に
従って設定される.
see section メジャーモードの選択方法.
通常, 指定したバッファはバッファリスト
(選択されているフレームのバッファリストとフレーム独立のバッファリストの
両方)の先頭に置かれる.
これは, other-buffer
の動作に影響する.
しかし, norecordがnil
以外であると, これを行わない.
see section バッファリスト.
関数switch-to-buffer
は, しばしば,
C-x bにバインドされて対話的に使われる.
プログラムでも多用される.
つねにnil
を返す.
この関数は, buffer-or-nameをカレントバッファにし,
現在選択されていないウィンドウに当該バッファを表示する.
そして当該ウィンドウを選択する.
バッファの扱い方はswitch-to-buffer
と同じである.
現在選択されているウィンドウは, この処理には絶対に使わない. それが唯一のウィンドウである場合には, この目的のために ウィンドウを分割して別のウィンドウを作る. 選択されているウィンドウがすでに当該バッファを表示している場合には, 当該ウィンドウはそのまま表示し続けるが, それにも関わらず, 表示するために別のウィンドウを探す.
この関数は, norecordがnil
であると,
switch-to-buffer
のようにバッファリストを更新する.
この関数は, buffer-or-nameをカレントバッファにし, 以前には選択されていない別のウィンドウで当該バッファに切り替える. そのウィンドウがそのフレームの選択されているウィンドウになる.
変数pop-up-frames
がnil
以外であると,
pop-to-buffer
は, 可視フレームから
当該バッファをすでに表示しているウィンドウを探す.
そのようなウィンドウがあれば, そのウィンドウを返すとともに,
そのウィンドウをそのフレームの選択されているウィンドウにする.
そのようなウィンドウがなければ, 新たなフレームを作成し
それにバッファを表示する.
pop-up-frames
がnil
であると,
pop-to-buffer
は選択されているフレーム内だけで処理を行う.
(選択されているフレームがミニバッファのみであるときには,
pop-to-buffer
は, ミニバッファのみでない
もっとも最近に選択されたフレーム内で処理する. )
変数pop-up-windows
がnil
以外であると,
もとのウィンドウとは異なる新たなウィンドウを作成するために
ウィンドウを分割することがある.
詳しくは, 表示ウィンドウを選ぶを参照.
other-windowがnil
以外であると,
選択されているウィンドウにbuffer-or-nameがすでに表示されていても,
pop-to-buffer
は別のウィンドウを探したり作成する.
そのため, buffer-or-nameは2つのウィンドウに表示されることになる.
一方で, buffer-or-nameが選択されているウィンドウに
すでに表示されていて, かつ, other-windowがnil
であると,
選択されているウィンドウはbuffer-or-nameの表示には十分であるとみなし,
なにも行わない.
display-buffer
に影響するすべての変数は,
pop-to-buffer
にも影響する.
see section 表示ウィンドウを選ぶ.
buffer-or-nameが文字列であり既存のバッファを指定しない場合,
その名前のバッファを作成する.
新たなバッファのメジャーモードは変数default-major-mode
に
従って設定される.
see section メジャーモードの選択方法.
この関数は, norecordがnil
であると,
switch-to-buffer
のようにバッファリストを更新する.
この関数は, bufferを表示しているすべてのウィンドウにおいて
bufferを別のバッファに切り替える.
別のバッファはother-buffer
で選ぶ.
この関数の普通の用途は, 別のバッファがどれになるか気にしない場合である.
つまり, bufferが表示されていないことを保証したい場合である.
この関数はnil
を返す.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
本節では, バッファを表示するためのウィンドウを選ぶための基本的な機能,
display-buffer
について述べます.
上位レベルの関数やコマンドはすべてこのサブルーティンを使います.
ここでは, display-buffer
の使い方とカスタマイズ方法を説明します.
このコマンドは, pop-to-buffer
のように,
buffer-or-nameをあるウィンドウに表示するが,
そのウィンドウを選択しないので当該バッファもカレントバッファにならない.
この関数は, 選択されているウィンドウを変えない.
not-this-windowがnil
以外であると,
指定したバッファが選択されているウィンドウにすでに表示されていても,
別のウィンドウに当該バッファを表示することを意味する.
これにより, 当該バッファが同時に2つのウィンドウに表示される.
さもなければ, buffer-or-nameがウィンドウにすでに表示されていると,
それで十分とみなしこの関数はなにもしない.
display-buffer
は, buffer-or-nameを表示するために
選んだウィンドウを返す.
引数frameがnil
以外であると,
バッファがすでに表示されているかどうかを検査するときに
どのフレームを対象とするかを指定する.
それらのフレームのどれかのウィンドウに当該バッファがすでに表示されていると,
display-buffer
は単にそのウィンドウを返す.
frameの可能な値はつぎのとおりである.
nil
であると, 選択されているフレームのウィンドウを対象とする.
t
であると, すべてのフレームのウィンドウを対象とする.
visible
であると,
すべての可視フレームのすべてのウィンドウを対象にする.
display-buffer
がウィンドウを作成したり探す詳しい手順は,
以下に述べる変数に依存する.
この変数は, display-buffer
が新たにウィンドウを作るかどうかを制御する.
nil
以外であり, かつ, ウィンドウがたった1つである場合,
そのウィンドウを分割する.
nil
であると, display-buffer
は
単一のウィンドウを分割せずにそれ全体を使う.
この変数は, ウィンドウが複数ある場合に
display-buffer
がどの時点でウィンドウを分割するかを決定する.
display-buffer
は, 最大ウィンドウの行数が
この変数による指定行数より大きければ, 最大ウィンドウをつねに分割する.
最大ウィンドウがこれだけ大きくない場合には,
それが唯一のウィンドウであり, かつ, pop-up-windows
がnil
以外
の場合にのみ最大ウィンドウを分割する.
この変数は, display-buffer
が新たなフレームを作るかどうかを制御する.
nil
以外であると, display-buffer
は,
すべての可視フレームから指定されたバッファをすでに表示している
既存のウィンドウを探す.
そのようなウィンドウがあれば, そのウィンドウを返す.
さもなければ, 新たなフレームを作る.
変数pop-up-frames
がnil
以外であると,
変数pop-up-windows
とsplit-height-threshold
は影響しない.
pop-up-frames
がnil
であると,
display-buffer
はウィンドウを分割するか再利用する.
詳しくは, see section フレーム.
この変数は, pop-up-frames
がnil
以外であるときに
どのように新たなフレームを作るかを指定する.
その値は引数なしの関数であること.
display-buffer
が新たにフレームを作るとき,
フレームを返すこの関数を呼び出す.
この変数のデフォルト値は,
pop-up-frame-alist
のパラメータを使って新たなフレームを作る関数である.
この変数は, display-buffer
が新たにフレームを作るときに
使用するフレームパラメータを指定する連想リストを保持する.
フレームパラメータに関して詳しくは,
see section フレームパラメータ.
特別に表示すべきバッファのバッファ名のリスト.
バッファ名がこのリストにあると,
display-buffer
は当該バッファを特別に扱う.
デフォルトでは, 特別に表示するとは, 専用のフレームにバッファを表示することである.
リストの要素が文字列でなくリストであると, リストのCARがバッファ名であり, リストの残りはフレームの作成方法を指定する. それは, フレームパラメータを指定する連想リストであるか, 関数とそれに渡す引数である. (関数の第1引数はつねに表示すべきバッファである. そのあとにリスト内の引数が続く. )
特別に表示すべきバッファを指定する正規表現のリスト.
バッファ名がこのリストのいずれかの正規表現に一致すると,
display-buffer
は当該バッファを特別に扱う.
デフォルトでは, 特別に表示するとは, 専用のフレームにバッファを表示することである.
リストの要素が文字列でなくリストであると,
リストのCARが正規表現であり,
リストの残りはフレームの作成方法を指定する.
上記のspecial-display-buffer-names
を参照.
この変数は, バッファを特別に表示するために呼び出す関数を保持する. 引数としてバッファを受け取り, 当該バッファを表示したウィンドウを返すこと.
この関数のデフォルト値はspecial-display-popup-frame
である.
この関数は, bufferをそれ専用のフレームに表示する. あるフレームのウィンドウにbufferがすでに表示されている場合, 当該ウィンドウを使うために当該フレームを可視にし手前に持ってくる. さもなければ, buffer用にフレームを作成する.
この関数は, bufferを表示している既存のウィンドウのフレームで 当該バッファだけを表示しているかどうかに関わらず, 既存の当該ウィンドウを使う. しかし, bufferを作るまえに読者の初期化ファイルで上記の変数に設定 しているときには, 当該ウィンドウは以前にこの関数が作成したものであろう.
この変数は, special-display-popup-frame
がフレームを作るときに
使用するフレームパラメータを保持する.
選択されているウィンドウに表示すべきバッファのバッファ名のリスト.
バッファ名がこのリストにあると,
display-buffer
は選択されているウィンドウで当該バッファに切り替える.
選択されているウィンドウに表示すべきバッファを指定する正規表現のリスト.
バッファ名がこのリストのいずれかの正規表現に一致すると,
display-buffer
は選択されているウィンドウで当該バッファに切り替える.
この変数は, display-buffer
のふるまいをカスタマイズする
もっとも柔軟な方法である.
nil
以外であると, display-buffer
が処理を依頼するために
呼び出す関数であること.
その関数は, display-buffer
が受け取るのと同じ2つの引数を受け付けること.
その関数は, ウィンドウを選ぶか作成し, 指定されたバッファを表示し,
当該ウィンドウを返すこと.
このフックは, 上に述べた他のオプションやフックすべてに優先する.
ウィンドウにはそのバッファ『専用』と印を付けられます.
そうすると, display-buffer
は他のバッファを表示するために
当該ウィンドウを使わないようにします.
この関数は, windowに専用と印が付いていればt
を返し,
さもなければnil
を返す.
この関数は, flagがnil
以外であるとwindowに専用の印を付け,
さもなければ専用の印を消す.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
各ウィンドウには, 同じバッファを表示している 別のウィンドウのポイントの値とは独立な独自のポイントの値があります. これにより, あるバッファを複数のウィンドウに表示しても有用なのです.
ユーザーにとっては, ポイントとはカーソルが置かれた箇所であり, 別のバッファに切り替えるとそのバッファのポイント位置に カーソルが移動します.
この関数は, windowの現在のポイント位置を返す. 選択されていないウィンドウでは, 当該ウィンドウを選択したときになるであろう (ウィンドウのバッファの)ポイント値である.
windowが選択されているウィンドウであり, かつ, そのバッファがカレントバッファであれば, 戻り値は当該バッファのポイントと同じである.
厳密にいえば, すべてのフォームsave-excursion
の外側での
『トップレベル』のポイントの値を返すほうがより正確である.
しかし, そのような値を探すのは困難である.
この関数は, windowのバッファ内の位置positionを windowのポイント位置とする.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
各ウィンドウには, バッファのどの箇所から表示を始めるかを指定する バッファ内位置を追跡するために使うマーカがあります. この位置をウィンドウの表示開始(display-start)位置 (あるいは単に開始(start)位置)と呼びます. この位置の直後にある文字が, ウィンドウの左上隅に現れます. この位置は, 通常, テキスト行の先頭にありますが, 必須ではありません.
この関数は, ウィンドウwindowの表示開始位置を返す.
windowがnil
であると,
選択されているウィンドウを使う.
たとえばつぎのとおりである.
(window-start) ⇒ 7058 |
新たにウィンドウを作成したり異なるバッファをウィンドウに表示すると, 表示開始位置は, 当該バッファの最近に使われた表示開始位置になるか, バッファに表示開始位置がなければ1になる.
再表示するとウィンドウ開始位置は (それ以前の再表示で明示的に位置を指定していなければ), ポイントがスクリーンに現れるように更新される. 再表示以外には, ウィンドウ開始位置を自動的に変更しない. ポイントを移動しても, つぎの再表示までは, 連動してウィンドウ開始位置が変更されると期待しないこと.
window-start
を使った実際的な例は,
テキスト行単位の移動のcount-lines
の記述を参照.
この関数は, ウィンドウwindowの表示の末尾の位置を返す.
windowがnil
であると, 選択されているウィンドウを使う.
バッファのテキストを変更したりポイントを移動しただけでは,
window-end
が返す値は更新されない.
この値は, Emacsが再表示を実行し途中で止めることなく
最後まで終了した場合にのみ更新される.
windowの最後の再表示が途中で止められて完了していないと, 当該ウィンドウの表示の末尾の位置はEmacsにはわからない.
updateがnil
以外であると,
window-end
はウィンドウの末尾の更新値をつねに返す.
保存しておいた値が正しければwindow-end
はそれを返す.
さもなければ, バッファのテキストを走査して正しい値を計算する.
この関数は, windowの表示開始位置を windowのバッファ内の位置positionとする. これはpositionを返す.
表示ルーティンは, バッファを表示するときには
ポイント位置が可視であることを強要する.
通常, 表示ルーティンは, ポイントを可視にするために必要なときには
表示開始位置を(つまりウィンドウをスクロールして)変更する.
しかし, noforceにnil
を指定してこの関数で開始位置を指定すると,
ポイント位置がスクリーンからはみ出したとしても,
表示開始位置をpositionとすることを意味する.
ポイントがスクリーンからはみ出す場合には,
表示ルーティンはウィンドウの中央行の左端にポイントを移動する.
たとえば, ポイントが1にあるときに ウィンドウの開始位置を2にしたとすると, ポイントはウィンドウの上端より『上』になる. 表示ルーティンは, 再表示時にポイントが1のままであると 自動的にポイントを移動する. 以下に例を示す.
;; 式 ---------- Buffer: foo ---------- ∗This is the contents of buffer foo. 2 3 4 5 6 ---------- Buffer: foo ---------- (set-window-start (selected-window) (1+ (window-start))) ⇒ 2 ;; 式 |
noforceがnil
以外であって
positionにするとつぎの再表示時にポイントがスクリーンからはみ出す
場合には, 再表示ではポイントが収まるように新たなウィンドウ開始位置を
計算し, positionを使わない.
この関数は, window内のpositionがスクリーン上で
現在可視なテキストの範囲内にあればt
を返す.
positionがスクリーンの上下端からはみ出す場合にはnil
を返す.
引数positionのデフォルトはポイントの現在位置であり,
windowのデフォルトは選択されているウィンドウである.
例を示す.
(or (pos-visible-in-window-p (point) (selected-window)) (recenter 0)) |
関数pos-visible-in-window-p
は, 垂直方向のスクロールだけを考慮する.
windowを水平方向にスクロールしたために
positionがはみ出している場合には,
pos-visible-in-window-p
はt
を返す.
see section 水平スクロール.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
垂直スクロールとは, ウィンドウ内のテキストを上向きや下向きに動かすことです.
ウィンドウの表示開始位置の値を変更することで動作します.
ポイントがスクリーン内に留まるようにwindow-point
の
値を変更することもあります.
コマンドscroll-up
やscroll-down
の
方向を示す『up』(上向き)と『down』(下向き)は,
ウィンドウを見ているときのバッファ内のテキストの移動方向を表します.
テキストは縦に長い紙に(横書きで)書いてあり,
スクロールコマンドはその紙を上下に動かすと想像してください.
したがって, バッファの中ほどのテキストを見ているときに
scroll-down
を繰り返し呼び出すと,
最終的にはバッファの先頭を見ることになります.
逆の慣習の名前を使うべきだと主張する人々もいます. 彼らは, 固定されたテキストのうえをウィンドウが動いていると想像するのです. すると, 『下向き』のコマンドはバッファの末尾に移動することになります. この見方は, ウィンドウとバッファ内のテキストとの実際の関係に よく適合しているのですが, ユーザーはそのように考えないようです. 端末上ではウィンドウは動きませんし, スクロールコマンドは 明らかにテキストをスクリーン上で上下に動かしています. ユーザーの視点に合う名称を選んだのです.
カレントバッファと選択されているウィンドウに
表示されているバッファとが異なる場合には,
(scroll-other-window
以外の)スクロール関数の結果は予測できません.
See section カレントバッファ.
この関数は, 選択されているウィンドウのテキストを 上向きにcount行だけスクロールする. countが負であると, 実際のスクロール方向は下向きである.
countがnil
(あるいは省略)であると,
スクロール量は, ウィンドウの(モード行を数えない)利用可能な高さより
next-screen-context-lines
だけ少なくなる.
scroll-up
はnil
を返す.
この関数は, 選択されているウィンドウのテキストを 下向きにcount行だけスクロールする. countが負であると, 実際のスクロール方向は上向きである.
countがnil
(あるいは省略)であると,
スクロール量は, ウィンドウの(モード行を数えない)利用可能な高さより
next-screen-context-lines
だけ少なくなる.
scroll-down
はnil
を返す.
この関数は, 別のウィンドウのテキストを上向きに
count行だけスクロールする.
countの値が負であったりnil
であると,
scroll-up
と同様に扱う.
変数other-window-scroll-buffer
で, スクロールするバッファを指定できる.
選択されているウィンドウがミニバッファ用であるときには,
つぎのウィンドウは, 通常, もっとも左上隅にあるウィンドウである.
変数minibuffer-scroll-window
で,
スクロールする別のウィンドウを指定できる.
別のウィンドウが選択されている場合には, この変数の効果はない.
see section ミニバッファに関するその他.
ミニバッファが活性であると,
右下隅のウィンドウが選択されているウィンドウであるときには,
つぎのウィンドウはミニバッファ用ウィンドウである.
この場合, scroll-other-window
はミニバッファをスクロールしようとする.
ミニバッファにたった1行しか入っていなければスクロールできず,
エコー領域に『Beginning of buffer』と短時間表示されたあとで,
ミニバッファの行が再度現れる.
この変数がnil
以外であると,
scroll-other-window
がスクロールするバッファを指定する.
このオプションは, スクロール時の余白の大きさ, つまり, ポイントとウィンドウの上端や下端とのあいだにある最低行数を指定する. ウィンドウの上端や下端からこの行数以内にポイントが移動するたびに, (可能ならば)ウィンドウを自動的にスクロールして, ポイントを余白の外側でウィンドウの中央近くに移動する.
この変数は, ポイントがスクリーンからはみ出したとき (あるいはスクロール時の余白に入ったとき)に どのように自動的にスクロールするかを制御する. 値が0であると, ウィンドウの縦方向でポイントが中央にくるように テキストをスクロールして再表示する. 値が正の整数nであると, ウィンドウをどちらかの方向に最大n行だけスクロールすると ポイントが見えるようになるときには, そのようにスクロールして再表示する. さもなければ, ポイントが中央にくるようにする. デフォルト値は0である.
この変数は, scroll-conservatively
の古い変種である.
違いは, 値がnであると正確にn行だけのスクロールを許すことである.
この機能はscroll-margin
では働かない.
デフォルト値は0である.
このオプションがnil
以外であると,
スクロール関数は, 可能ならばカーソルの垂直方向の位置を
変えないようにポイントを移動する.
この変数の値は, 1画面分スクロールしたときに連続して残っている行数である.
たとえば, 引数nil
のscroll-up
は,
ウィンドウの下端にあるこの行数だけの行が上端にくるようにスクロールする.
デフォルト値は2
である.
この関数は, 選択されているウィンドウをスクロールして ポイント位置にあるテキストがウィンドウ内の垂直方向の指定位置にくるようにする.
countが非負の数であると, ポイント位置にある行を
ウィンドウの上端からcount行下にくるようにする.
countが負の数であると, ウィンドウの下端から数え,
-1はウィンドウの使用可能な最後の行を表す.
countがnil
以外のリストであると,
ウィンドウの中央の行を表す.
countがnil
であると, recenter
は,
ポイント位置にある行がウィンドウの中央にくるようにして,
選択されているフレーム全体をクリアして再表示する.
recenter
が対話的に呼び出されると, countは生の前置引数である.
したがって, 前置引数としてC-uと打つと
countはnil
以外のリストになり,
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) |
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
英文は『内側のループ』では左から右へ『外側のループ』では上から下へと読むので,
水平スクロールは垂直スクロールには似ていません.
垂直スクロールでは表示するテキストの連続部分を選びますが,
水平スクロールでは各行の一部がスクリーンからはみ出すことになります.
そのため, 水平スクロールの量は, バッファ内の位置ではなく,
コラム数で指定します.
これは, window-start
が返す表示開始位置とはなんの関係もありません.
通常, 水平スクロールは行われません. つまり, 左端のコラムはウィンドウの左端にあります. この状態で右向きにスクロールしても, それによって見えてくるスクリーンの左側にはなにもないので意味がありません. ですから, これは禁止されます. 左向きへのスクロールは許されて, テキストの先頭コラムはウィンドウの端からはみ出し, それまで切り詰められていた右側のコラムが見えるようになります. 左向きの水平スクロール量が0でなければ, 右向きへスクロールして戻せますが, これは全体としての水平スクロール量が0になるまでです. 左向きスクロールの限界はありませんが, 最終的にはテキストすべてが左端からはみ出してしまいます.
この関数は, 選択されているウィンドウをcountコラムだけ
左向きに(countが負ならば右向きに)スクロールする.
戻り値は, 変更後の左向き水平スクロール量の総量であり,
window-hscroll
(下記参照)が返す値と同じである.
この関数は, 選択されているウィンドウをcountコラムだけ
右向きに(countが負ならば左向きに)スクロールする.
戻り値は, 変更後の左向き水平スクロール量の総量であり,
window-hscroll
(下記参照)が返す値と同じである.
可能なだけウィンドウを右向きにスクロールしてしまうと, 通常の状態, つまり, 左向き水平スクロール量が0になり, それ以降, 右向きスクロールは効果がなくなる.
この関数は, windowの左向き水平スクロール量の総量, つまり, windowのテキストが左端を超えてスクロールされたコラム数を返す.
値はけっして負にはならない. windowが水平方向にスクロールされていなければ (これが通常の状態)0である.
windowがnil
であると, 選択されているウィンドウを使う.
(window-hscroll) ⇒ 0 (scroll-left 5) ⇒ 5 (window-hscroll) ⇒ 5 |
この関数は, 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))))) |
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
Emacsのウィンドウは矩形であり, そのサイズ情報は 高さ(行数)と幅(各行の文字数)から成ります. モード行は高さに含みます. しかし, スクロールバーや左右のウィンドウを隔てる文字‘|’のコラムは 幅には含みません.
つぎの3つの関数は, ウィンドウのサイズ情報を返します.
この関数は, モード行を含むwindowの行数を返す.
windowがフレーム全体を占める場合, この値は典型的には,
当該フレームにおけるframe-height
の値より1小さい
(最後の行はミニバッファ用につねに確保してあるため).
windowがnil
であると, この関数は選択されているウィンドウを使う.
(window-height) ⇒ 23 (split-window-vertically) ⇒ #<window 4 on windows.texi> (window-height) ⇒ 11 |
この関数は, windowのコラム数を返す.
windowがフレーム全体を占める場合, この値は,
当該フレームにおけるframe-width
の値と同じである.
この幅には, ウィンドウのスクロールバーや
左右のウィンドウを隔てる文字‘|’のコラムは含まない.
windowがnil
であると, この関数は選択されているウィンドウを使う.
(window-width) ⇒ 80 |
この関数は, windowの四隅の座標から成るリストを返す.
windowがnil
であると, 選択されているウィンドウを使う.
list内の順番は(left top right bottom)
(つまり, 左端, 上端, 右端, 下端)であり,
フレームの左上隅を0としてすべての要素は0を基準とする.
要素rightはwindowが使用する右端のコラムより1大きく,
bottomはwindowが使用する下端より1大きく
モード行と同じである.
左右に隣り合ったウィンドウがある場合, 右隣にウィンドウがあるウィンドウの右端の値には, ウィンドウを隔てる区切りの幅が含まれる. この区切りは, 文字‘|’のコラムであるかスクロールバーである. ウィンドウの幅にはこの区切りは含まないため, この場合, 左端と右端の差は幅に等しくない.
典型的な24行の端末でウィンドウが1つの場合に得られる結果を示す.
(window-edges (selected-window)) ⇒ (0 0 80 23) |
下端が23行目であるのは, 最下行はエコー領域だからである.
windowがフレームの左上隅にあると,
bottomは(window-height)
の値に等しく,
rightは(window-width)
の値にほぼ等しく
(9),
topとleftは0である.
たとえば, つぎのウィンドウは‘0 0 5 8’である.
当該フレームには8コラムより多くあり,
ウィンドウの最終コラム(7コラム目)はテキストではなく境界であると仮定する.
最後の行(4行目)はモード行であり, ここでは‘xxxxxxxxx’で示した.
0 _______ 0 | | | | | | | | xxxxxxxxx 4 7 |
左右に隣り合ったウィンドウがあるときには, フレームの右端にないウィンドウの最後のコラムは区切りである. 区切りは, ウィンドウの幅では1コラムか2コラム占める. 左側の区切りは左隣のウィンドウに属するので, ウィンドウには左側の区切りは含まれない.
つぎの例では, フレームは7コラム幅であるとする. すると, 左側のウィンドウの四隅は‘0 0 4 3’であり, 右側のウィンドウの四隅は‘4 0 7 3’である.
___ ___ | | | | | | xxxxxxxxx 0 34 7 |
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ウィンドウサイズ関数は2つに大別できます. ウィンドウサイズを変える上位レベルのコマンドと ウィンドウサイズを調べる下位レベルの関数です. Emacsでは重なり合ったウィンドウやウィンドウのあいだに隙間を許さないので, 1つのウィンドウの大きさを変えると別のウィンドウにも影響します.
この関数は, 隣り合うウィンドウから場所を奪って,
選択されているウィンドウをsize行高くする.
1つのウィンドウから場所を奪い取り, 奪い尽くすと別のウィンドウから取る.
場所を奪われたウィンドウがwindow-min-height
行未満になると,
そのウィンドウは消える.
horizontalがnil
以外であると,
この関数は, 隣り合うウィンドウから場所を奪って,
選択されているウィンドウをsizeコラム広くする.
場所を奪われたウィンドウがwindow-min-width
コラム未満になると,
そのウィンドウは消える.
指定した大きさがウィンドウのフレームの大きさを超える場合, この関数は, ウィンドウがフレームの高さ(あるいは幅)全体を占めるようにする.
sizeが負であると, この関数は-size行/コラムだけ
ウィンドウを縮める.
ウィンドウが(window-min-height
とwindow-min-width
の)
最小サイズより小さくなると, enlarge-window
は
当該ウィンドウを削除する.
enlarge-window
はnil
を返す.
この関数は, 選択されているウィンドウをcolumnsコラム広くする.
(defun enlarge-window-horizontally (columns) (enlarge-window columns t)) |
この関数はenlarge-window
に似ているが引数sizeの符号を変えて,
選択されているウィンドウを縮めて指定行数(コラム数)を
他のウィンドウに与える.
ウィンドウがwindow-min-height
やwindow-min-width
未満に縮むと,
そのウィンドウは消える.
sizeが負であると, ウィンドウは -size行/コラムだけ伸びる.
この関数は, 選択されているウィンドウをcolumnsコラム狭くする. つぎのように定義できる.
(defun shrink-window-horizontally (columns) (shrink-window columns t)) |
このコマンドは, バッファの全内容を表示するに十分なだけの大きさに
windowを縮めるが, window-min-height
行未満にはしない.
しかし, バッファの全テキストを表示するにはウィンドウが小さすぎる場合や, 内容の一部がスクロールでスクリーンからはみ出している場合や, ウィンドウの幅がフレームの幅と同じでない場合や, ウィンドウがフレームの唯一のウィンドウである場合には, このコマンドはなにもしない.
つぎの2つの変数は, ウィンドウサイズを変える関数に最小の高さと幅を課します.
この変数の値は, ウィンドウが自動的に削除されるまでに
どの程度までウィンドウが短くなりうるかを決定する.
ウィンドウをwindow-min-height
行未満に小さくすると自動的に削除され,
これより短いウィンドウは作成できない.
絶対的な最小の高さは2行(モード行に1行, バッファの表示に1行)である.
ウィンドウサイズを変える処理では, この変数が2未満であると2に設定し直す.
デフォルト値は4である.
この変数の値は, ウィンドウが自動的に削除されるまでに
どの程度までウィンドウが狭くなりうるかを決定する.
ウィンドウをwindow-min-width
コラム未満に小さくすると自動的に削除され,
これより狭いウィンドウは作成できない.
絶対的な最小の幅は1であり, それ未満は無視する.
デフォルト値は10である.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
本節では, スクリーン座標をウィンドウに関連付ける方法を述べます.
この関数は, フレームframeにおいて指定したカーソル位置を含んでいる
ウィンドウを返す.
座標xとyは, フレームの左上隅から文字単位で数える.
座標が範囲外であるとwindow-at
はnil
を返す.
frameを省略すると, 選択されているフレームを使う.
この関数は, 指定したフレーム位置がウィンドウwindowの中に 入るかどうかを検査する.
引数coordinatesは, (x . y)
の形のコンスセルである.
座標xとyは, スクリーンやフレームの左上隅から文字単位で数える.
coordinates-in-window-p
が返す値がnil
以外であると,
当該座標はwindowの内側にある.
つぎのように, この値はウィンドウ内での位置も表す.
(relx . rely)
当該座標はwindowの内側である. 数relxとrelyは, 指定位置に対応するウィンドウ相対の座標であり, ウィンドウの左上隅を0として数えたものである.
mode-line
当該座標はwindowのモード行の内側である.
vertical-split
当該座標はwindowと右隣のウィンドウのあいだの垂直行である. ウィンドウにスクロールバーがない場合に限って, この値になる. スクロールバーはウィンドウの外側であるとみなす.
nil
当該座標はwindowのどこでもない.
関数coordinates-in-window-p
は,
windowのフレームをつねに使うため, 引数にフレームを必要としない.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ウィンドウ構成(window configuration)は, 1つのフレームの全体の配置, つまり, すべてのウィンドウ, それらの大きさ, 表示しているバッファ, 各バッファの表示位置, ポイントとマークの値を記録します. 保存しておいたウィンドウ構成を復元すれば, まえとまったく同じ配置に戻せます.
1つのフレームではなくすべてのフレームを記録するには, ウィンドウ構成のかわりにフレーム構成を使います. See section フレーム構成.
この関数は, 選択されているフレームの現在のウィンドウ構成を表す
新たなオブジェクトを返す.
ウィンドウ構成には, ウィンドウの個数, それらの大きさとカレントバッファ,
どのウィンドウが選択されているウィンドウであるか,
各ウィンドウが表示しているバッファ, 表示開始位置,
ポイントとマークの位置が含まれる.
window-min-height
, window-min-width
,
minibuffer-scroll-window
の値も含む.
例外はカレントバッファのポイントであり, その値は保存されない.
この関数は, configurationで指定される
ウィンドウとバッファの構成に復元する.
引数configurationは,
current-window-configuration
が返した値であること.
configurationを作成したフレームにおいて,
そのフレームが選択されているかどうかに関わらず, この構成を復元する.
set-window-configuration
は, 新たな構成が古いものと
実際に異なるのかどうか識別する方法を知らないため,
ウィンドウサイズの変更とつねにみなして
window-size-change-functions
(see section ウィンドウのスクロールとサイズ変更向けのフック)の
実行を引き起こす.
configurationを保存したフレームがなくなっていると,
この関数は, 3つの変数, window-min-height
,
window-min-width
, minibuffer-scroll-window
を
復元するだけである.
save-window-excursion
と同じ効果を得るための
この関数の使い方をつぎに示す.
(let ((config (current-window-configuration))) (unwind-protect (progn (split-window-vertically nil) …) (set-window-configuration config))) |
このスペシャルフォームは, ウィンドウ構成を記録し,
formsを順に評価し, もとのウィンドウ構成に復元する.
ウィンドウ構成には, ポイントの値と可視なバッファの部分が含まれる.
また, 選択されているウィンドウも含む.
しかし, これにはカレントバッファのポイント値は含まれないため,
ポイント位置を保存したい場合にはsave-excursion
も使う.
save-selected-window
で十分なときには, この構文を使わないこと.
save-window-excursion
から抜けると,
window-size-change-functions
の実行をつねに引き起こす.
(復元した構成とformsの終りでの構成が実際に異なるかどうかを
識別する方法を知らない. )
戻り値は, formsの最後のフォームの値である. 例を示す.
(split-window) ⇒ #<window 25 on control.texi> (setq w (selected-window)) ⇒ #<window 19 on control.texi> (save-window-excursion
(delete-other-windows w)
(switch-to-buffer "foo")
'do-something)
⇒ do-something
;; スクリーンはここでふたたび分割される
|
この関数は, objectがウィンドウ構成であればt
を返す.
この関数は, ウィンドウの構造を基に2つのウィンドウ構成を比較する.
ポイントとマークの値, 保存されたスクロール位置は無視するので,
それらが異なっていてもt
を返す.
関数equal
でも2つのウィンドウ構成を比較できるが,
保存されたポイントやマークが違うだけであっても異なる部分があると,
等しくない構成とみなす.
ウィンドウ構成の内部を調べる基本関数には意味があるでしょうが, 実装してありません. 実装するだけの価値があるほど有用なのかはっきりしないのです.
[ << ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
この文書は新堂 安孝によって2009年9月22日にtexi2html 1.82を用いて生成されました。