29.13.2 バッファー表示用のアクション関数

アクション関数(action function)とはバッファーを表示するウィンドウを選択するためにdisplay-bufferが呼び出す関数です。アクション関数はbuffer (表示するバッファー)、およびalist (アクションalist、バッファー表示用のアクションalistを参照)という2つの引数を受け取ります。これらの関数は成功時にはbufferを表示するウィンドウ、失敗時にはnilをリターンします。

以下の基本的なアクション関数がEmacsで定義されています。

Function: display-buffer-same-window buffer alist

この関数は選択されたウィンドウ内にbufferの表示を試みる。選択されたウィンドウがミニバッファーウィンドウや他のバッファー専用(専用のウィンドウを参照)の場合には失敗する。alistに非nilinhibit-same-windowエントリーがある場合にも失敗する。

Function: display-buffer-reuse-window buffer alist

この関数はすでにbufferを表示しているウィンドウを探すことによりバッファーの表示を試みる。選択されたフレーム上のウィンドウは別フレーム上のウィンドウより優先される。

alistに非nilinhibit-same-windowエントリーがある場合には、選択されたウィンドウは再利用に適さない。bufferをすでに表示しているウィンドウを検索するフレームセットは、アクションalistのreusable-framesエントリーで指定できる。alistreusable-framesエントリーが含まれる場合には、この関数は選択されたフレームだけを検索する。

この関数が他のフレーム上のウィンドウを選択した場合には、そのフレームを可視にするとともに、alistinhibit-switch-frameエントリーを含んでいなければ、必要ならそのフレームを最前面に移動(raise)する。

Function: display-buffer-reuse-mode-window buffer alist

この関数は与えられたモードですでにbufferを表示しているウィンドウを探すことによりバッファーの表示を試みる。

alistmodeエントリーを含んでいれば、その値がメジャーモード(シンボル)、またはメジャーモードのリストを指定する。alistmodeエントリーが含まれていなければ、かわりにbufferのカレントのメジャーモードが使用される。このように指定されたモードのいずれかから継承されたモードでバッファーを表示しているウィンドウは候補となる。

display-buffer-reuse-windowのように関数の挙動はinhibit-same-windowreusable-framesinhibit-switch-frameにたいするalistエントリーによっても制御される。

Function: display-buffer-pop-up-window buffer alist

この関数は、最大もしくはもっとも長い間参照されていないウィンドウ(通常は選択されたフレームに配置されている)を分割することによりbufferの表示を試みる。これは実際には、split-window-preferred-function (バッファー表示の追加オプションを参照)内で指定された関数を呼び出すことにより分割を行う。

新たなウィンドウのサイズはalistにエントリーwindow-heightwindow-widthを与えることにより調整できる。alistpreserve-sizeエントリーが含まれていれば、Emacsは将来のリサイズ操作の間に新たなウィンドウのサイズの維持も試みる(ウィンドウサイズの保持を参照)。

この関数は分割可能なウィンドウがなければ失敗する。これの多くは、分割を許容するのに十分大きいウィンドウがない場合に発生する。この問題にたいしてはsplit-height-thresholdsplit-width-thresholdに小さい値をセットすることが助けになるかもしれない。選択されたフレームがフレームパラメーターunsplittableをもつ場合にも分割は失敗する。バッファーのパラメーターを参照のこと。

Function: display-buffer-in-previous-window buffer alist

この関数はbufferを以前に表示したウィンドウにbufferの表示を試みる。

alistに非nilinhibit-same-windowエントリーが含まれる場合には、選択されたウィンドウは使用に適さない。専用ウィンドウ(dedicated window)は、すでにbufferを表示済みの場合のみ使用可能。alistprevious-windowエントリーが含まれる場合には、そのエントリーで指定されるウィンドウが以前にbufferを表示したことがなくても、そのウィンドウが使用される。

alistreusable-framesエントリー(バッファー表示用のアクションalistを参照)が含まれる場合には、その値が適切なウィンドウを検索するフレームを決定する。この関数はalistreusable-framesエントリーが含まれず、display-buffer-reuse-framespop-up-framesがいずれもnilなら選択されたフレームのみ、いずれかが非nilならカレント端末上のすべてのフレームを検索する。

これらのルールに照らして1つ以上のウィンドウが使用に適している場合には、この関数は以下の優先順にしたがって選択を行う:

  • alistprevious-windowエントリーで指定されるウィンドウが選択されたウィンドウでなければそのウィンドウ。
  • 以前にbufferを表示していたウィンドウが選択されたウィンドウでなければそのウィンドウ。
  • alistprevious-windowエントリーで指定されているか、あるいは以前にbufferを表示していれば選択されたウィンドウ。
Function: display-buffer-use-some-window buffer alist

この関数は既存のウィンドウを選んでそのウィンドウにバッファーを表示することによってbufferの表示を試みる。まずalistlru-framesエントリーによって指定されたすべてのフレームにおいて最近使用されていないウィンドウ(ウィンドウのサイクル順を参照)を探す(そのようなエントリーが存在しなければ選択されたウィンドウにフォールバック)。alistwindow-min-widthエントリーとwindow-min-heightエントリーに指定された制約を満足するようなウィンドウも優先される(window-min-widthエントリーがなければfull-widthのウィンドウを優先)。最後にalistlru-timeエントリーで指定された値より長い使用時間のウィンドウは除外する。

最近使用されていないウィンドウが見つからなければ、この関数は別のウィンドウ(可視なフレーム上のなるべく大きいウィンドウを優先)の使用を試みる。ウィンドウがすべて別のバッファー専用(専用のウィンドウを参照)の場合には失敗するかもしれない。

上記はsome-windowalistエントリーがlru、あるいはデフォルトのnilの場合の挙動について説明している。他に指定できる値はmruであり、たとえばdisplay-buffer-base-action(nil . ((some-window . mru)))にカスタマイズされている場合には、この関数はもっとも最近使用したウィンドウを優先する。これにより同一ウィンドウで連続してdisplay-bufferを呼び出して複数のバッファーを表示することができる。ユーザーが参照したいウィンドウが3つ以上ある場合の構成を考えてみよう。このユーザーは選択されていないウィンドウにおいて、複数バッファーに分散しているクエリー結果を順次参照したいものとする。lruストラテジー(strategy: 戦略)では、display-buffer-use-some-window呼び出しのたびに最近もっとも使用されていないウィンドウが変化するので、Emacsが継続的に別のウィンドウを選ぶ必要が生じるかもしれない。ストラテジーがmruなら選ばれるウィンドウは常に同じままなので、予測可能なユーザーエクスペリエンスが得られるだろう。

Function: display-buffer-use-least-recent-window buffer alist

この関数はdisplay-buffer-use-some-windowと似ているが、より厳格に最近使用されたウィンドウを使用しないよう試みる。特に選択されたウィンドウを使用することはない。更に加えてまず既にbufferを表示しているウィンドウの再利用を試み、次に別のバッファーを表示しているウィンドウの使用時間だけにもとづいてそのウィンドウを使用すべきかどうかを判断、それでも利用可能なウィンドウが見つからなければ新たなウィンドウをポップアップする。

最後にこの関数は以降の呼び出しでそのウィンドウに別のバッファーを表示することを避けるために、リターンするウィンドウの使用時間(ウィンドウの選択を参照)を増加させる。この関数を使って複数のバッファーを順に表示したいアプリケーションは、alistlru-timeに初期値として選択されたウィンドウの使用時間をセットして提供することによって、この関数を支援することができる。この関数は呼び出されるごとにリターンするウィンドウの使用時間をより長い使用時間に増加することによって、以降の呼び出しでは以前にリターンしたウィンドウの使用を回避する。

Function: display-buffer-in-direction buffer alist

この関数はalistで指定した位置でbufferの表示を試みる。この目的のために、alistには値がleftabove (かup)、rightbelow (かdown)のいずれかであるようなdirectionエントリーを含めること。それ以外の値は通常はbelowと解釈される。

alistwindowエントリーも含まれている場合には、その値は参照ウィンドウ(reference window)を指定する。値には選択されたフレームのメインウィンドウ(サイドウィンドウのオプションと関数を参照)を意味するmain、選択されたフレームのルートウィンドウ(ウィンドウとフレームを参照)を意味するrootのような特別なシンボルを指定できる。任意の有効なウィンドウの指定も可能。それ以外の値(またはwindowエントリーを完全に省略)は参照ウィンドウとして選択されたウィンドウを使用することを意味する。

この関数は、指定方向ですでにbufferを表示しているウィンドウの再利用を試みる。そのようなウィンドウが存在しなければ、指定方向に新たなウィンドウを生成するために参照ウィンドウの分割を試みる。これも同様に失敗したら指定方向にある既存ウィンドウにbufferの表示を試みる。いずれの場合でもdirectionエントリーで指定された参照ウィンドウ側に、少なくとも1辺を参照ウィンドウと共有したウィンドウが選ばれることになる。

参照ウィンドウが生きたウィンドウなら、選択されるウィンドウのエッジはdirectionエントリーで指定された方向と反対側が共有される。たとえばdirectionエントリーの値がleftなら、選択されるウィンドウの右エッジ座標は、参照ウィンドウの左エッジ座標と等しくなる(座標とウィンドウを参照)。

参照ウィンドウが内部ウィンドウなら、再利用されるウィンドウはdirectionエントリーで指定されるエッジが共有されなければならない。したがって、たとえば参照ウィンドウがフレームのルートウィンドウ、directionエントリーの値がleftなら、再利用されるウィンドウはフレームの左側でなければならない。これは選択されるウィンドウと参照ウィンドウの左エッジ座標が等しいことを意味する。

しかし新たなウィンドウは選択したウィンドウが参照ウィンドウの反対側エッジを共有するように参照ウィンドウを分割して作成される。上記の例では参照ウィンドウを子ウィンドウとして、新たな生きたウィンドウと共にルートウィンドウが新たに作成される。選択されたウィンドウの右エッジ座標は、参照ウィンドウの左エッジ座標、左エッジ座標はフレームのルートウィンドウの左エッジ座標と等しくなる。

directionエントリーにたいする特別な4つの値leftmosttoprightmostbottomでは参照ウィンドウとして選択されたフレームのメインウィンドウを暗黙に指定できる。これはたとえば(direction . left) (window . main)のかわりに、単に(direction . leftmost)と指定することができることを意味する。このような場合ではalistの既存のwindowエントリーは無視される。

Function: display-buffer-below-selected buffer alist

この関数は選択されたウィンドウの下のウィンドウ内にbufferの表示を試みる。選択されたウィンドウの下にすでにそのバッファーを表示するウィンドウがあれば、そのウィンドウを再利用する。

そのようなウィンドウが存在しなければ、この関数は選択されたウィンドウを分割することにより新たなウィンドウを作成してbufferの表示を試みる。alistに適切なwindow-heightwindow-widthのエントリーが含まれていれば、ウィンドウのサイズ調整も試みる(上記参照)。

選択されたウィンドウの分割に失敗、かつ選択されたウィンドウの下に別のバッファーを表示中の非専用ウィンドウがある場合には、この関数はbufferの表示にそのウィンドウの使用を試みる。

alistwindow-min-heightエントリーが含まれていると、この関数は少なくとも使用するウィンドウの高さがこのエントリーで指定された値になることを保証する。これは単なる保証であることに注意。使用するウィンドウを実際にリサイズするためには、alistで適切なwindow-heightエントリーも提供しなければならない。

Function: display-buffer-at-bottom buffer alist

この関数は選択されたフレームの最下にあるウィンドウ内にbufferの表示を試みる。

これはフレーム最下のウィンドウまたはフレームのルートウィンドウを分割、または選択されたフレーム最下の既存ウィンドウを試みる。

Function: display-buffer-pop-up-frame buffer alist

この関数は新たにフレームを作成して、そのフレームのウィンドウ内にバッファーを表示する。これは実際にはpop-up-frame-function (バッファー表示の追加オプションを参照)内で指定された関数を呼び出すことによりフレーム作成の処理を行う。alistpop-up-frame-parametersエントリーを含む場合には、その連想値(associated value)が新たに作成されたフレームのパラメーターに追加される。

Function: display-buffer-full-frame buffer alist

この関数はカレントフレームの他のウィンドウをすべて削除して、フレーム全体を占めるようにバッファーを表示する。

Function: display-buffer-in-child-frame buffer alist

この関数は選択されたフレームの既存の子フレーム、または子フレームを新たに作成してbufferの表示を試みる(子フレームを参照)。alistに非nilchild-frame-parametersエントリーがあれば、対応する値が新たなフレームのフレームパラメーターのalistとして与えられる。デフォルトとして選択されたフレームを指定するparent-frameパラメーターが提供される。その子フレームが別のフレームの子になる場合には、対応するエントリーをalistに追加しなければならない。

子フレームの外観はalistを通じて提供されるパラメーターに大きく依存する。子フレームが可視のままでいることを保証するために、少なくとも子フレームのサイズ(サイズのパラメーターを参照)と位置(位置のパラメーターを参照)を指定して比率(ratio)を使用すること、およびkeep-ratioパラメーター(フレームとの相互作用のためのパラメーターを参照)の追加を推奨する。他に考慮すべきパラメーターについては子フレームを参照のこと。

Function: display-buffer-use-some-frame buffer alist

この関数は述語を満足するフレーム(デフォルトは選択されたフレーム以外のフレーム)を探してbufferの表示を試みる。

この関数が他のフレーム上のウィンドウを選択した場合には、そのフレームを可視にするとともに、alistinhibit-switch-frameエントリーを含んでいなければ、必要ならそのフレームを最前面に移動(raise)する。

alistに非nilframe-predicateエントリーがあれば、その値は1つの引数(フレーム)を受け取ってそのフレームが候補なら非nilをリターンする、デフォルトの述語を置き換える関数。

alistに非nilinhibit-same-windowエントリーがある場合には選択されたウィンドウは使用しない。したがって選択されたフレームに単一のウィンドウしかなければ使用しない。

Function: display-buffer-no-window buffer alist

この関数はalistに非nilallow-no-windowエントリーがあればbufferを表示せずにシンボルfailをリターンする。この構成はアクション関数がnilbufferを表示するウィンドウをリターンするという慣習の唯一の例外である。alistにそのようなallow-no-windowエントリーがなければ、この関数はnilをリターンする。

この関数がfailをリターンした場合には、display-bufferはそれ以上のディスプレイアクションをスキップして即座にnilをリターンする。この関数がnilをリターンした場合には、display-bufferはもしあれば次のディスプレイアクションを継続する。

display-bufferの呼び出し側が非nilallow-no-windowエントリーを指定した場合には、nilのリターン値の処理も可能とみなされる。

他の2つのアクション関数display-buffer-in-side-windowdisplay-buffer-in-atom-windowについては、それぞれ適正なセクションで説明します(サイドウィンドウへのバッファーの表示アトミックウィンドウを参照)。


This page has generated for branch:work/emacs-30_69b16e5c63840479270d32f58daea923fe725b90, commit:5e3f74b56ff47b5bcef2526c70f53f749bbd45f6 to check Japanese translation.