Next: Choosing Window Options, Previous: Choosing Window, Up: Windows [Contents][Index]
display-buffer
にたいするアクション関数以下の基本的なアクション関数がEmacs内で定義されています。これらの関数はそれぞれ表示するバッファーbufferとアクションalistという2つの引数をとります。それぞれのアクション関数は成功したらウィンドウ、失敗したらnil
をリターンします。
この関数は選択されたウィンドウ内にbufferの表示を試みる。選択されたウィンドウがミニバッファーウィンドウや他のバッファー専用(Dedicated Windowsを参照)の場合には失敗する。alistに非nil
のinhibit-same-window
エントリーがある場合にも失敗する。
この関数はすでにbufferを表示しているウィンドウを探すことによりバッファーの表示を試みる。
alistに非nil
のinhibit-same-window
エントリーがある場合には、選択されたウィンドウは再利用に適さない。alistにreusable-frames
エントリーが含まれる場合には、その値により再利用可能なウィンドウをどのフレームで検索するか決定される:
nil
は選択されたフレーム(実際には最後の非ミニバッファーフレーム)上のウィンドウを考慮することを意味する。
t
はすべてのフレーム上のウィンドウを考慮することを意味する。
visible
はすべての可視フレーム上のウィンドウを考慮することを意味する。
これらはnext-window
にたいするall-frames引数の場合とは若干異なることに注意(Cyclic Window Orderingを参照)。
alistにreusable-frames
エントリーが含まれなければ、この関数は通常は選択されたフレームだけを検索する。しかし変数pop-up-frames
が非nil
ならカレント端末上のすべてのフレームを検索する。Choosing Window Optionsを参照。
この関数が他のフレーム上のウィンドウを選択した場合には、そのフレームを可視にするとともに、alistがinhibit-switch-frame
エントリー(Choosing Window Optionsを参照)を含んでいなければ必要ならそのフレームを最前面に移動(raise)する。
この関数は新たにフレームを作成して、そのフレームのウィンドウ内にバッファーを表示する。これは実際にはpop-up-frame-function
(Choosing Window Optionsを参照)内で指定された関数を呼び出すことによりフレーム作成の処理を行う。alistがpop-up-frame-parameters
エントリーを含む場合には、その連想値(associated
value)が新たに作成されたフレームのパラメーターに追加される。
この関数は述語(デフォルトではカレント以外のすべてのフレーム)に合致するフレームを探すことによりbufferの表示を試みる。
この関数が他のフレーム上のウィンドウを選択した場合には、そのフレームを可視にするとともに、alistがinhibit-switch-frame
エントリー(Choosing Window Optionsを参照)を含んでいなければ必要ならそのフレームを最前面に移動(raise)する。
alistに非nil
のframe-predicate
エントリーがあれば、その値は1つの引数(フレーム)を受け取ってそのフレームが候補なら非nil
をリターンする、デフォルトの述語を置き換える関数。
alistに非nil
のinhibit-same-window
エントリーがあれば、選択されたウィンドウが使用される。つまり選択されたフレームにウィンドウが1つしかなければ、それは使用しない。
この関数は、最大のウィンドウ、もしくはもっとも長い間参照されていない(LRU: least
recently-used)ウィンドウを分割することによりbufferの表示を試みる。これは実際にはsplit-window-preferred-function
(Choosing Window Optionsを参照)内で指定された関数を呼び出すことによって分割を行う。
新たなウィンドウのサイズはalistにエントリーwindow-height
とwindow-width
を与えることにより調整できる。ウィンドウの高さを調整するにはCARがwindow-height
、CDRが以下のいずれかであるようなエントリーを使用する:
nil
は新たなウィンドウの高さを変更しないことを意味する。
shrink-window-if-larger-than-buffer
とfit-window-to-buffer
。Resizing Windowsを参照のこと。
ウィンドウの幅を調整するにはCARがwindow-width
、CDRが以下のいずれかであるようなエントリーを使用する:
nil
は新たなウィンドウの幅を変更しないことを意味する。
alistにpreserve-size
エントリーが含まれるなら、Emacsは将来のリサイズ操作における、新たなウィンドウのサイズの予約を試みる(Preserving Window Sizesを参照)。このエントリーのCDRはコンスセルでなければならない。このコンスセルのCARが非nil
ならウィンドウの幅を予約し、CDRが非nil
ならウィンドウの高さを予約することを意味する。
この関数は何らかの理由により分割を行えるウィンドウが存在しなければ失敗する可能性がある(選択されたフレームがフレームパラメーターunsplittable
をもつ場合等。Buffer Parametersを参照)。
この関数は選択されたウィンドウの下のウィンドウ内にbufferの表示を試みる。これは選択されたウィンドウの分割、または選択されたウィンドウの下のウィンドウの使用を意味する。新たにウィンドウを作成した場合には、alistに適切なwindow-height
またはwindow-width
エントリーが含まれていればサイズの調整も行うだろう。上記を参照のこと。
この関数は以前にbufferを表示していたウィンドウ内にそのバッファーの表示を試みる。alistに非nil
のinhibit-same-window
エントリーがある場合には、選択されたウィンドウは再利用に適さない。alistにreusable-frames
エントリーが含まれる場合には、display-buffer-reuse-window
と同様に、その値は適正なウィンドウをどのフレームから検索するかを決定する。
alistにprevious-window
エントリーがある場合には、そのエントリーにより指定されたウィンドウは、たとえそのウィンドウが以前にbufferを表示したことが一度もなくても、上記メソッドが見つけた他のすべてのウィンドウをオーバーライドするだろう。
この関数は選択されたフレームの最下にあるウィンドウ内にbufferの表示を試みる。
これはフレーム最下のウィンドウまたはフレームのルートウィンドウを分割するか、選択されたフレーム最下の既存ウィンドウを再利用する。
この関数は既存のウィンドウを選択して、そのウィンドウ内にbufferを表示することによりバッファーの表示を試みる。すべてのウィンドウが他のバッファー専用なら、この関数は失敗する可能性がある(Dedicated Windowsを参照)。
この関数はalistに非nil
のallow-no-window
エントリーがある場合にはbuffer
を表示しない。これによりデフォルトの動作をオーバーライドしてバッファーの表示を避けることができる。これは呼び出し側がallow-no-window
に非nil
値を指定してdisplay-buffer
からリターンされたnil
値を処理するようなケースを想定している。
アクション関数を説明するために以下の例を考えてみましょう。
(display-buffer (get-buffer-create "*foo*") '((display-buffer-reuse-window display-buffer-pop-up-window display-buffer-pop-up-frame) (reusable-frames . 0) (window-height . 10) (window-width . 40)))
上記のフォームを評価することにより、以下のようにdisplay-buffer
が実行されます:
(1)*foo*と呼ばれるバッファーがすでに可視またはアイコン化されたフレームに表示されていればそのウィンドウを再利用する。
(2)それ以外なら新たなウィンドウをポップアップ、それが不可能なら新たなフレームでバッファーを表示する。(3)
すべてのステップが失敗すると、それが何であれdisplay-buffer-base-action
とdisplay-buffer-fallback-action
が指示するものを使用して処理を行う。
さらにdisplay-buffer
は、(display-buffer
により*foo*が前からそこに配置されていたら)再使用されるウィンドウ、およびポップアップされたウィンドウにたいして調整を試みます。そのウィンドウが垂直コンビネーションの一部なら高さはその行数にセットされるでしょう。数字10のかわりに関数fit-window-to-buffer
を指定すると、display-buffer
は空のバッファーにフィットするようにウィンドウを1行にセットするでしょう。ウィンドウが水平コンビネーションの一部なら列数を40にセットします。新たなウィンドウが垂直または水平のどちらに組み合わせられるかは、ウィンドウの分割方向とsplit-window-preferred-function
、split-height-threshold
、split-width-threshold
の値に依存します(Choosing Window Optionsを参照)。
事前に以下のようなdisplay-buffer-alist
にたいするセットアップがあり、この呼び出しを組み合わせたとしましょう。
(let ((display-buffer-alist (cons '("\\*foo\\*" (display-buffer-reuse-window display-buffer-below-selected) (reusable-frames) (window-height . 5)) display-buffer-alist))) (display-buffer (get-buffer-create "*foo*") '((display-buffer-reuse-window display-buffer-pop-up-window display-buffer-pop-up-frame) (reusable-frames . 0) (window-height . 10) (window-width . 40))))
このフォームはまず選択されたフレーム上で*foo*を表示しているウィンドウを再利用するようにdisplay-buffer
に試行させます。そのようなウィンドウが存在しなければ、選択されたウィンドウの分割を試みるか、それが不可能なら選択されたウィンドウの下のウィンドウを使用します。
選択されたウィンドウの下にウィンドウがないか、下のウィンドウがそれのバッファーに専用なら、display-buffer
は前の例で説明したように処理を行うでしょう。しかし再利用されたウィンドウやポップアップされたウィンドウの高さ調整を試みる場合には、display-buffer
のaction引数内の行数に対応する指定をオーバーライドする行数5へのセットを試みることに注意してください。