Next: Buffer Display Action Alists, Previous: Choosing Window, Up: Displaying Buffers [Contents][Index]
アクション関数(action
function)とはバッファーを表示するウィンドウを選択するためにdisplay-buffer
が呼び出す関数です。アクション関数はbuffer
(表示するバッファー)、およびalist (アクションalist、Buffer Display Action Alistsを参照)という2つの引数を受け取ります。これらの関数は成功時にはbufferを表示するウィンドウ、失敗時にはnil
をリターンします。
以下の基本的なアクション関数がEmacsで定義されています。
この関数は選択されたウィンドウ内にbufferの表示を試みる。選択されたウィンドウがミニバッファーウィンドウや他のバッファー専用(Dedicated Windowsを参照)の場合には失敗する。alistに非nil
のinhibit-same-window
エントリーがある場合にも失敗する。
この関数はすでにbufferを表示しているウィンドウを探すことによりバッファーの表示を試みる。選択されたフレーム上のウィンドウは別フレーム上のウィンドウより優先される。
alistに非nil
のinhibit-same-window
エントリーがある場合には、選択されたウィンドウは再利用に適さない。bufferをすでに表示しているウィンドウを検索するフレームセットは、アクションalistのreusable-frames
エントリーで指定できる。alistにreusable-frames
エントリーが含まれる場合には、この関数は選択されたフレームだけを検索する。
この関数が他のフレーム上のウィンドウを選択した場合には、そのフレームを可視にするとともに、alistがinhibit-switch-frame
エントリーを含んでいなければ、必要ならそのフレームを最前面に移動(raise)する。
この関数は与えられたモードですでにbufferを表示しているウィンドウを探すことによりバッファーの表示を試みる。
alistがmode
エントリーを含んでいれば、その値がメジャーモード(シンボル)、またはメジャーモードのリストを指定する。alistにmode
エントリーが含まれていなければ、かわりにbufferのカレントのメジャーモードが使用される。このように指定されたモードのいずれかから継承されたモードでバッファーを表示しているウィンドウは候補となる。
display-buffer-reuse-window
のように関数の挙動はinhibit-same-window
、reusable-frames
、inhibit-switch-frame
にたいするalistエントリーによっても制御される。
この関数は、最大もしくはもっとも長い間参照されていないウィンドウ(通常は選択されたフレームに配置されている)を分割することによりbufferの表示を試みる。これは実際には、split-window-preferred-function
(Choosing Window Optionsを参照)内で指定された関数を呼び出すことにより分割を行う。
新たなウィンドウのサイズはalistにエントリーwindow-height
とwindow-width
を与えることにより調整できる。alistにpreserve-size
エントリーが含まれていれば、Emacsは将来のリサイズ操作の間に新たなウィンドウのサイズの維持も試みる(Preserving Window Sizesを参照)。
この関数は分割可能なウィンドウがなければ失敗する。これの多くは、分割を許容するのに十分大きいウィンドウがない場合に発生する。この問題にたいしてはsplit-height-threshold
やsplit-width-threshold
に小さい値をセットすることが助けになるかもしれない。選択されたフレームがフレームパラメーターunsplittable
をもつ場合にも分割は失敗する。Buffer Parametersを参照のこと。
この関数はbufferを以前に表示したウィンドウにbufferの表示を試みる。
alistに非nil
のinhibit-same-window
エントリーが含まれる場合には、選択されたウィンドウは使用に適さない。専用ウィンドウ()dedicated
windowは、すでにbufferを表示済みの場合のみ使用可能。alistにprevious-window
エントリーが含まれる場合には、そのエントリーで指定されるウィンドウが以前にbufferを表示したことがなくても、そのウィンドウが使用される。
alistにreusable-frames
エントリー(Buffer Display Action Alistsを参照)が含まれる場合には、その値が適切なウィンドウを検索するフレームを決定する。この関数はalistにreusable-frames
エントリーが含まれず、display-buffer-reuse-frames
とpop-up-frames
がいずれもnil
なら選択されたフレームのみ、いずれかが非nil
ならカレント端末上のすべてのフレームを検索する。
これらのルールに照らして1つ以上のウィンドウが使用に適している場合には、この関数は以下の優先順にしたがって選択を行う:
previous-window
エントリーで指定されるウィンドウが選択されたウィンドウでなければそのウィンドウ。
previous-window
エントリーで指定されているか、あるいは以前にbufferを表示していれば選択されたウィンドウ。
この関数は既存のウィンドウを選択して、そのウィンドウ内にbufferを表示することによりバッファーの表示を試みる。すべてのウィンドウが他のバッファー専用の場合には、この関数は失敗する可能性がある(Dedicated Windowsを参照)。
この関数はalistで指定した位置でbufferの表示を試みる。この目的のために、alistには値がleft
、above
(かup
)、right
、below
(かdown
)のいずれかであるようなdirection
エントリーを含めること。それ以外の値は通常はbelow
と解釈される。
alistにwindow
エントリーも含まれている場合には、その値は参照ウィンドウを指定する。値には選択されたフレームのメインウィンドウ(Side Window Options and Functionsを参照)を意味するmain
、選択されたフレームのルートウィンドウ(Windows and Framesを参照)を意味するroot
のような特別なシンボルを指定できる。任意の有効なウィンドウの指定も可能。それ以外の値(またはwindow
エントリーを完全に省略)は参照ウィンドウとして選択されたウィンドウを使用することを意味する。
この関数は、指定方向でずすでにbufferを表示しているウィンドウの再利用を試みる。そのようなウィンドウが存在しなければ、指定方向に新たなウィンドウを生成するために参照ウィンドウの分割を試みる。これも同様に失敗したら指定方向にある既存ウィンドウにbufferの表示を試みる。いずれの場合でもdirection
エントリーで指定された参照ウィンドウ側に、少なくとも1辺を参照ウィンドウと共有したウィンドウが選ばれることになる。
参照ウィンドウが生きたウィンドウなら、選択されるウィンドウのエッジはdirection
エントリーで指定された方向と反対側が共有される。たとえばdirection
エントリーの値がleft
なら、選択されるウィンドウの右エッジ座標は、参照ウィンドウの左エッジ座標と等しくなる(Coordinates and Windowsを参照)。
参照ウィンドウが内部ウィンドウなら、再利用されるウィンドウはdirection
エントリーで指定されるエッジが共有されなければならない。したがって、たとえば参照ウィンドウがフレームのルートウィンフォウ、direction
エントリーの値がleft
なら、再利用されるウィンドウはフレムの左側でなければならない。これは選択されるウィンドウと参照ウィンドウの左エッジ座標が等しいことを意味する。
しかし新たなウィンドウは選択したウィンドウが参照ウィンドウの反対側エッジを共有するように参照ウィンドウを分割して作成される。上記の例では参照ウィンドウを子ウィンドウとして、新たな生きたウィンドウと共にルートウィンドウが新たに作成される。選択されたウィンドウの右エッジ座標は、参照ウィンドウの左エッジ座標、左エッジ座標はフレームのルートウィンドウの左エッジ座標と等しくなる。
direction
エントリーにたいする特別な4つの値leftmost
、top
、rightmost
、bottom
では参照ウィンドウとして選択されたフレームのメインウィンドウを暗黙に指定できる。これはたとえば(direction . left) (window . main)
のかわりに、単に(direction . leftmost)
と指定することができることを意味する。このような場合ではalistの既存のwindow
エントリーは無視される。
この関数は選択されたウィンドウの下のウィンドウ内にbufferの表示を試みる。選択されたウィンドウの下にすでにそのバッファーを表示するウィンドウがあれば、そのウィンドウを再利用する。
そのようなウィンドウが存在しなければ、この関数は選択されたウィンドウを分割することにより新たなウィンドウを作成してbufferの表示を試みる。alistに適切なwindow-height
かwindow-width
のエントリーが含まれていれば、ウィンドウのサイズ調整も試みる(上記参照)。
選択されたウィンドウの分割に失敗、かつ選択されたウィンドウの下に別のバッファーを表示中の非専用ウィンドウがある場合には、この関数はbufferの表示にそのウィンドウの使用を試みる。
alistにwindow-min-height
エントリーが含まれていると、この関数は少なくとも使用するウィンドウの高さがこのエントリーで指定された値になることを保証する。これは単なる保証であることに注意。使用するウィンドウを実際にリサイズするためには、alistで適切なwindow-height
エントリーも提供しなければならない。
この関数は選択されたフレームの最下にあるウィンドウ内にbufferの表示を試みる。
これはフレーム最下のウィンドウまたはフレームのルートウィンドウを分割、または選択されたフレーム最下の既存ウィンドウを試みる。
この関数は新たにフレームを作成して、そのフレームのウィンドウ内にバッファーを表示する。これは実際にはpop-up-frame-function
(Choosing Window Optionsを参照)内で指定された関数を呼び出すことによりフレーム作成の処理を行う。alistがpop-up-frame-parameters
エントリーを含む場合には、その連想値(associated
value)が新たに作成されたフレームのパラメーターに追加される。
この関数は選択されたフレームの既存の子フレーム、または子フレームを新たに作成してbufferの表示を試みる(Child Framesを参照)。alistに非nil
のchild-frame-parameters
エントリーがあれば、対応する値が新たなフレームのフレームパラメーターのalistとして与えられる。デフォルトとして選択されたフレームを指定するparent-frame
パラメーターが提供される。その子フレームが別のフレームの子になる場合には、対応するエントリーをalistに追加しなければならない。
子フレームの外観はalistを通じて提供されるパラメーターに大きく依存する。子フレームが可視のままでいることを保証するために、少なくとも子フレームのサイズ(Size Parametersを参照)と位置(Position Parametersを参照)を指定して比率(ratio)を使用すること、およびkeep-ratio
パラメーター(Frame Interaction Parametersを参照)の追加を推奨する。他に考慮すべきパラメーターについてはChild Framesを参照のこと。
この関数は述語を満足するフレーム(デフォルトは選択されたフレーム以外のフレーム)を探してbufferの表示を試みる。
この関数が他のフレーム上のウィンドウを選択した場合には、そのフレームを可視にするとともに、alistがinhibit-switch-frame
エントリーを含んでいなければ、必要ならそのフレームを最前面に移動(raise)する。
alistに非nil
のframe-predicate
エントリーがあれば、その値は1つの引数(フレーム)を受け取ってそのフレームが候補なら非nil
をリターンする、デフォルトの述語を置き換える関数。
alistに非nil
のinhibit-same-window
エントリーがある場合には選択されたウィンドウは使用しない。したがって選択されたフレームに単一のウィンドウしかなければ使用しない。
この関数はalistに非nil
のallow-no-window
エントリーがあればbufferを表示せずにシンボルfail
をリターンする。この構成はアクション関数がnil
かbufferを表示するウィンドウをリターンするという慣習の唯一の例外である。alistにそのようなallow-no-window
エントリーがなければ、この関数はnil
をリターンする。
この関数がfail
をリターンした場合には、display-buffer
はそれ委譲のディスプレイアクションをスキップして即座にnil
をリターンする。この関数がnil
をリターンした場合には、display-buffer
はもしあれば次のディスプレイアクションを継続する。
display-buffer
の呼び出し側が非nil
のallow-no-window
エントリーを指定した場合には、nil
のリターン値の処理も可能とみなされる。
他の2つのアクション関数display-buffer-in-side-window
とdisplay-buffer-in-atom-window
については、それぞれ適正なセクションで説明します(Displaying Buffers in Side WindowsとAtomic Windowsを参照)。