コマンドdisplay-buffer
は表示のために柔軟にウィンドウを選択して、そのウィンドウ内に指定されたバッファーを表示します。これはキーバインディングC-x
4
C-oを通じてインタラクティブに呼び出すことができます。またswitch-to-buffer
やpop-to-buffer
を含む多くの関数やコマンドにからサブルーチンとしても使用されます(ウィンドウ内のバッファーへの切り替えを参照)。
このコマンドは表示するウィンドウを探すために、いくつかの複雑なステップを実行します。これらのステップはディスプレイアクション(display
actions)を用いて記述されます。ディスプレイアクションは(functions
.
alist)
という形式をもちます。ここでfunctionsは“アクション関数”と呼ばれる単一の関数か関数のリスト(バッファー表示用のアクション関数を参照)、alistは“アクションalist”と呼ばれる連想リストです(バッファー表示用のアクションalistを参照)。ディスプレイアクションの例についてはバッファー表示の思想を参照してください。
アクション関数は、表示するバッファーと、アクションalistという、2つの引数を受け取ります。これは、自身の条件にしたがってウィンドウを選択、または作成して、バッファーをウィンドウ内に表示します。成功した場合はそのウィンドウ、それ以外はnil
をリターンします。
display-buffer
は複数ソースからのディスプレイアクションを組み合わせて、アクション関数のいずれか1つがバッファーの表示を管理して非nil
値をリターンするまでアクション関数を順に呼び出します。
このコマンドは、ウィンドウを選択したり、そのバッファーをカレントにすることなく、buffer-or-nameをウィンドウに表示させる。引数buffer-or-nameはバッファー、または既存のバッファーの名前でなければならない。リターン値はバッファーを表示するために選ばれたウィンドウ、適切なウィンドウが見つからなければnil
。
オプション引数actionが非nil
なら、それは通常はディスプレイアクション(上述)であること。display-buffer
は以下のソース(優先度の高位順)からディスプレイアクションを集約してアクション関数リストとアクションalistを構築する:
display-buffer-overriding-action
。
display-buffer-alist
。
display-buffer-base-action
。
display-buffer-fallback-action
。
これはこれらのディプレイアクションにより指定されるアクション関数すべてのリストを、実際にはdisplay-buffer
が構築することを意味する。このリストの最初の要素は(もしあれば)
display-buffer-overriding-action
が指定する最初のアクション関数、最後の要素はdisplay-buffer-pop-up-frame
(display-buffer-fallback-action
が指定する最後のアクション関数)。このリストから重複要素は削除されないので、1回のdisplay-buffer
呼び出しの間に同一のアクション関数が複数回呼び出されるかもしれない。
display-buffer
はバッファーを1つ目の引数、組み合わされたalistを2つ目の引数として、いずれかの関数が非nil
をリターンするまで、このリスト内で指定されたアクション関数を順に呼び出す。異なるソースから指定されたディスプレイアクションをdisplay-buffer
がどのように処理するかの例はアクション関数の優先順を参照のこと。
2つ目の引数は常に、上記に挙げたソースが指定するすべてのアクションalistエントリーのリストであることに注意。したがってこのリストの最初の要素は(もしあれば)
display-buffer-overriding-action
が指定する最初のアクションalistエントリー、最後の要素はもしあれば
display-buffer-base-action
の最後のalistエントリーとなる(display-buffer-fallback-action
のアクションalistが空の場合)。
組み合わされたアクションalistは重複したエントリーを含むかもしれず、同じキーのエントリーが異なる値をもつかもしれないことにも注意。アクション関数はルールとして見つかった最初のキーの連想値を常に使用する。したがってアクション関数が使用する連想値が、そのアクション関数に指定されたディスプレイアクションが提供する連想値である必要はない。
引数actionにはリストではない非nil
値も指定できる。これはたとえ選択されたウィンドウがすでにそのバッファーを表示していても、選択されたウィンドウではない別のウィンドウにバッファーが表示されるべきという特別な意味をもつ。プレフィックス引数とともにインタラクティブに呼び出された場合には、actionはt
である。Lispプログラムは値として常にリストを提供すること。
オプション引数frameが非nil
の場合は、そのバッファーがすでに表示されているか判断する際、どのフレームをチェックするかを指定する。これはactionのアクションalistに要素(reusable-frames . frame)
を追加するのと等価(バッファー表示用のアクションalistを参照)。frameは互換性のために提供される引数であり、Lispプログラムは使用するべきではない。
この変数の値はdisplay-buffer
により最高の優先順で扱われるディスプレイアクションであること。デフォルト値は空のディスプレイアクション(つまり(nil . nil)
)。
このオプションの値はディスプレイアクションにコンディション(condition:
状態)をマップするalist。各コンディションはバッファー名、display-buffer
に渡されたaction引数とともにbuffer-match-p
(バッファーリストを参照)に渡される。これが非nil
値をリターンしたら、display-buffer
は対応するディスプレイアクションをそのバッファーの表示に使用する。警告:
条件としてderived-mode
やmajor-mode
を用いる場合には、バッファーのメジャーモードがセットされる前にdisplay-buffer
和呼び出すとマッチの失敗が報告されるかもしれない。
display-buffer
の呼び出し側がaction引数にカテゴリー(シンボル)を渡した場合には、以下のようにしてdisplay-buffer-alist
の同じカテゴリーを使って違う名前のバッファーをマッチできる:
(add-to-list 'display-buffer-alist '((category . comint) (display-buffer-same-window) (inhibit-same-window . nil))) (display-buffer (get-buffer-create "*my-shell*") '(nil (category . comint)))
See buffer-match-p
.
表示されたバッファーの名前に関わらず、呼び出し側はシンボルcomint
としてカテゴリーを定義する。その後でdisplay-buffer-alist
は同じカテゴリーで表示されたすべてのバッファーにたいしてこのカテゴリーをマッチする。これによりバッファー名をマッチするために複雑な正規表現を作成する必要を回避できる。
このオプションの値はディスプレイアクションであること。このオプションはdisplay-buffer
呼び出しにたいする標準のディスプレイアクションを定義するために使用できる。
このディスプレイアクションはdisplay-buffer
にたいして、他のディスプレイアクションが与えられなかった場合の代替え処理を指定する。