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を参照)。