GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Choosing-Window-Options.html ・ emacs-doc.conao3.com

29.15.4 バッファ表示用の追加オプション

バッファ表示操作(バッファ表示用のウィンドウの選択を参照)の動作は、以下のユーザーオプションでさらに変更できます。

ユーザーオプション: pop-up-windows

この変数の値が nil 以外の場合、display-buffer は既存のウィンドウを分割して、表示用の新しいウィンドウを作成することができます。これがデフォルトです。

この変数は後方互換性のためだけに提供されています。display-buffer は display-buffer-fallback-action 内の特殊な機構を通じてこの変数に従い、このオプションの値が nil 以外である場合には、アクション関数 display-buffer-pop-up-window(バッファ表示用アクション関数 を参照)を呼び出します。display-buffer-pop-up-window 自体はこの変数を参照せず、ユーザーは display-buffer-alist などで直接指定することができます。

ユーザーオプション: split-window-preferred-function

この変数は、バッファ表示用の新しいウィンドウを作成するために、ウィンドウを分割する関数を指定します。これは、display-buffer-pop-up-window アクション関数によって実際にウィンドウを分割する際に使用されます。

この値は、ウィンドウを1つの引数として受け取り、新しいウィンドウ(目的のバッファの表示に使用されます)または nil(分割に失敗したことを意味します)のいずれかを返す関数である必要があります。デフォルト値は split-window-sensibly であり、これについては次に説明します。

関数: split-window-sensibly &optional window

この関数は window を分割し、新たに作成されたウィンドウを返そうとします。window を分割できない場合は、nil を返します。window が省略されているか、あるいは nil の場合は、選択中のウィンドウがデフォルトとなります。

この関数は、ウィンドウを分割できるタイミングを決定する通常のルールに従います(ウィンドウの分割を参照)。まず、split-height-thresholdによる制約(後述)に従い、新しいウィンドウを下に配置する垂直分割か、あるいはsplit-width-thresholdおよびその他の制約に従い、新しいウィンドウを右側に配置する水平分割のいずれかを試みます。最初に垂直分割を試みるか水平分割を試みるかは、ユーザーオプションsplit-window-preferred-directionの値によって決まります。第1次元に沿った分割が失敗した場合は、もう一方の次元に沿った分割を試みます。それも失敗し、かつそのウィンドウがフレーム上の唯一のウィンドウである場合、この関数は再び分割を試み、split-height-thresholdを無視して新しいウィンドウを下に配置します。これも失敗した場合、この関数は処理を断念し、nilを返します。

ユーザーオプション: split-height-threshold

この変数は、split-window-sensibly がウィンドウを分割して新しいウィンドウを下に配置することを許可するかどうかを指定します。整数の場合は、元のウィンドウに少なくともその行数がある場合にのみ分割することを意味します。nil の場合は、この方法で分割しないことを意味します。

ユーザーオプション: split-width-threshold

この変数は、split-window-sensibly がウィンドウを分割して新しいウィンドウを右側に配置することを許可するかどうかを指定します。値が整数の場合、元のウィンドウに少なくともその列数がある場合にのみ分割することを意味します。値が nil の場合、この方法で分割しないことを意味します。

ユーザーオプション: split-window-preferred-direction

この変数は、split-height-threshold および split-width-threshold の値によってウィンドウを垂直方向と水平方向の両方に分割可能と判断された場合に、split-window-sensibly がウィンドウを分割しようとする最初の次元を決定します。デフォルト値は longest であり、これはウィンドウフレームの高さが幅以上であれば垂直方向に、それ以外の場合は水平方向に分割することを意味します。vertical および horizontal の値は、最初の分割を試みる方向を指定します。

ユーザーオプション: even-window-sizes

この変数がnil以外の場合、display-bufferは既存のウィンドウを再利用する際にウィンドウサイズを偶数にし、そのウィンドウは選択中のウィンドウに隣接します。

値が width-only の場合、再利用ウィンドウが選択ウィンドウの左側または右側にあり、かつ選択ウィンドウが再利用ウィンドウよりも広い場合にのみ、サイズが均等化されます。値が height-only の場合、再利用ウィンドウが選択ウィンドウの上側または下側にあり、かつ選択ウィンドウが再利用ウィンドウよりも高い場合にのみ、サイズが均等化されます。それ以外の nil 以外の値は、選択ウィンドウが組み合わせの観点から再利用ウィンドウよりも大きい場合に限り、これらのいずれかのケースでサイズを均等化することを意味します。

ユーザーオプション: pop-up-frames

この変数の値が nil 以外の場合、display-buffer は新しいフレームを作成することでバッファを表示することがあります。デフォルトは nil です。

nil 以外の値は、display-buffer が既に buffer-or-name を表示しているウィンドウを探す際、選択中のフレームだけでなく、表示されているフレームやアイコン化されたフレームであればどれでも検索できることを意味します。

display-bufferのalistにある同名のエントリは、変数よりも優先されます。

この変数は、主に後方互換性のために提供されています。display-buffer は display-buffer-fallback-action 内の特殊な機構を通じてこの変数に従い、値が nil 以外である場合には、アクション関数 display-buffer-pop-up-frame(バッファ表示用アクション関数 を参照)を呼び出します。(これはウィンドウを分割しようとする前に行われます。)この変数は display-buffer-pop-up-frame 自身では参照されず、ユーザーは display-buffer-alist などで直接指定することができます。

ユーザーオプション: pop-up-frame-function

この変数は、バッファ表示用の新しいウィンドウを作成するための、新規フレーム生成関数を指定します。これはdisplay-buffer-pop-up-frameアクション関数で使用されます。

値は、引数を取らずにフレームを返すか、あるいはフレームを作成できなかった場合は nil を返す関数である必要があります。デフォルト値は、pop-up-frame-alist で指定されたパラメータ(後述)を用いてフレームを作成する関数です。

ユーザーオプション: pop-up-frame-alist

この変数にはフレームパラメータ(フレームパラメータを参照)のalistが格納されており、pop-up-frame-functionで指定された関数がこれを用いて新しいフレームを作成します。デフォルトはnilです。

このオプションは後方互換性のためにのみ提供されています。なお、display-buffer-pop-up-frame が pop-up-frame-function で指定された関数を呼び出す際、すべての pop-up-frame-parameters アクションアリストエントリの値が pop-up-frame-alist の先頭に付加されるため、アクションアリストエントリで指定された値が、pop-up-frame-alist の対応する値を実質的に上書きすることになります。

したがって、ユーザーはpop-up-frame-alistをカスタマイズするのではなく、display-buffer-alistにpop-up-frame-parametersアクションリストのエントリを設定すべきです。そうすることで初めて、ユーザーが指定したパラメータの値が、display-bufferの呼び出し元が指定した同パラメータの値を上書きすることが保証されます。

display-buffer の設計にあたっては、pop-up-windows、pop-up-frames、pop-up-frame-alist、same-window-buffer-names、same-window-regexps といった旧来のオプションを使用するコードとの互換性を維持するため、多くの工夫が凝らされてきました。Lisp プログラムおよびユーザーは、これらのオプションの使用を控えるべきです。前述の通り、pop-up-frame-alist のカスタマイズについては既に警告しました。ここでは、残りのオプションを代わりに表示アクションを使用するように変換する方法について説明します。

pop-up-windows

この変数はデフォルトで t となっています。これを nil にカスタマイズして display-buffer に「やってはいけないこと」を伝えるのではなく、代わりに試すべきアクション関数を display-buffer-base-action に列挙する方がはるかに好ましいです。例えば次のように記述します:

(setopt
 display-buffer-base-action
 '((display-buffer-reuse-window display-buffer-same-window
    display-buffer-in-previous-window
    display-buffer-use-some-window)))
pop-up-frames

この変数を t にカスタマイズする代わりに、例えば次のように display-buffer-base-action をカスタマイズできます。

(setopt display-buffer-base-action '(nil (pop-up-frames . t)))
same-window-buffer-names
same-window-regexps

これらのオプションのいずれかにバッファ名や正規表現を追加する代わりに、そのバッファに display-buffer-alist エントリを使用し、アクション関数 display-buffer-same-window を指定してください。

(setopt
 display-buffer-alist
 (cons '("\\*foo\\*" (display-buffer-same-window))
        display-buffer-alist))