display-buffer の仕組み
¶display-buffer
コマンド(および内部的にこれを呼び出すコマンド)は、以下に示す手順に従って表示するウィンドウを選択します。この手順の変更方法の詳細については、The Emacs Lisp Reference Manual の Choosing
a Window for Displaying a Buffer を参照してください。
display-buffer-alist に、バッファ名に一致する正規表現と display-buffer-same-window アクション関数への参照(The Emacs Lisp Reference Manual の Action
Functions for Buffer Display を参照)を追加することで、Emacs
にこのステップをスキップさせないようにできます(The Emacs Lisp Reference
Manual の Choosing
a Window for Displaying a Buffer を参照)。例えば、バッファ *scratch* を優先的に選択したウィンドウに表示するには、次のように記述します。
(setopt
display-buffer-alist
'(("\\*scratch\\*" (display-buffer-same-window))))
デフォルトでは、display-buffer-alistはnilです。
reusable-frames
アクションアリスタのエントリを使用すれば、他のフレームにあるウィンドウも再利用可能です(The Emacs
Lisp Reference Manual の Action
Alists for Buffer Display を参照してください)。具体的な方法については、次のステップの例をご覧ください。
display-buffer-base-action の値(The Emacs Lisp Reference Manual の Choosing
a Window for Displaying a Buffer を参照)を次のように変更します。
(setopt display-buffer-base-action '((display-buffer-reuse-window display-buffer-pop-up-frame) (reusable-frames . 0)))
このカスタマイズでは、直前のステップにおいて、表示されているすべてのフレームまたはアイコン化されたフレームから再利用可能なウィンドウを検索するようにも試みます。
分割は、変数 split-height-threshold と split-width-threshold
に応じて、垂直または水平のいずれかになります。これらの変数には整数値を指定する必要があります。split-height-threshold
が選択したウィンドウの高さより小さい場合、分割によって新しいウィンドウが下に配置されます。そうでない場合、つまり split-width-threshold
がウィンドウの幅より小さい場合は、新しいウィンドウが右側に配置されます。どちらの条件も満たさない場合、Emacs
は新しいウィンドウが下に来るように分割を試みます――ただし、これはウィンドウが以前に分割されていない場合に限ります(過剰な分割を避けるためです)。両方の条件が満たされた際に、Emacs
がまず垂直分割を試みるか水平分割を試みるかは、split-window-preferred-direction の値によって決まります。デフォルト値は
longest であり、これはウィンドウのフレームが幅よりも高さがある場合(縦向きフレーム)は垂直分割を、高さよりも幅がある場合(横向きフレーム)は水平分割を行うことを意味します。値 vertical と horizontal
は、それぞれ常に垂直分割または水平分割を優先します。
reusable-frames
アクションリストのエントリ(上記参照)があれば、別のフレーム上のウィンドウも対象となり得ます。