Next: , Previous: , Up: Windows   [Contents][Index]


29.2 ウィンドウとフレーム

それぞれのウィンドウは正確に1つのフレームに属します(Framesを参照)。ある特定のフレームに属するすべてのウィンドウにたいして、それらのウィンドウがそのフレームに所有されている(owned)、あるいは単にそのフレーム上にあるというときもあります。

Function: window-frame &optional window

この関数は指定されたwindowのフレーム(windowが属するフレーム)をリターンする。windownilの場合のデフォルトは選択されたウィンドウ(Selecting Windowsを参照)。

Function: window-list &optional frame minibuffer window

この関数は指定されたframeに所有されるすべての生きたウィンドウのリストをリターンする。frameが省略またはnilの場合のデフォルトは選択されたフレーム(Input Focusを参照)。

オプション引数minibufferはそのリストにミニバッファーウィンドウ(Minibuffer Windowsを参照)を含めるべきかどうかを指定する。minibuffertならミニバッファーウィンドウが含まれ、nilまたは省略された場合にはミニバッファーウィンドウがアクティブのときだけ含まれる。minibuffernilt以外ならミニバッファーウィンドウは含まれない。

オプション引数windowが非nilなら、それは指定されたフレーム上の生きたウィンドウでなければならない。その場合にはwindowがリターンされるリストの最初の要素になる。windowが省略またはnilなら、frameの選択されたウィンドウ(Selecting Windowsを参照)が最初の要素になる。

同一フレーム内のウィンドウは、リーフノード(leaf nodes)が生きたウィンドウであるようなウィンドウツリー(window tree)内に組織化されます。ウィンドウツリーの内部ノード(internal nodes)は生きたウィンドウではありません。これらのウィンドウは生きたウィンドウ間の関係を組織化するという目的のために存在します。ウィンドウツリーのルートノード(root node)はルートウィンドウ(root window)と呼ばれます。ルートノードは生きたウィンドウ、または内部ウィンドウのいずれかです。生きたウィンドウの場合には、ミニバッファーウィンドウ以外にウィンドウが1つだけあるフレーム、あるいはミニバッファーだけのフレームです。Frame Layoutを参照してください。

フレーム内で唯一ではないミニバッファーウィンドウ(Minibuffer Windowsを参照)は親ウィンドウをもたないので、厳密に言えばフレームのウィンドウツリーの一部ではありません。それでもフレームのルートウィンドウの兄弟ウィンドウなので、ルートウィンドウからwindow-next-sibling (以下参照)を通じて到達することができます。さらにこのセクションの最後に説明する関数window-treeは実際のウィンドウツリーと共にミニバッファーウィンドウをリストします。

Function: frame-root-window &optional frame-or-window

この関数はframe-or-windowにたいするルートウィンドウをリターンする。引数frame-or-windowはウィンドウかフレームのいずれかであること。これが省略またはnilの場合のデフォルトは選択されたフレーム。frame-or-windowがウィンドウなら、リターン値はそのウィンドウのフレームのルートウィンドウ。

生きたウィンドウが分割(split)されているとき(Splitting Windowsを参照)は、以前は1つだった2つの生きたウィンドウが存在します。これらのうちの一方は、元のウィンドウと同じLispウィンドウオブジェクトとして表され、もう一方は新たに作成されたLispウィンドウオブジェクトとして表されます。これらの生きたウィンドウはいずれも単一の内部ウィンドウの子ウィンドウ(child windows)として、ウィンドウツリーのリーフノードになります。もし必要ならEmacsはこの内部ウィンドウを自動的に作成します。この内部ウィンドウは親ウィンドウ(parent window)とも呼ばれ、ウィンドウツリー内の適切な位置に配置されます。同じ親を共有するウィンドウセットは兄弟(sibling)と呼ばれます。

Function: window-parent &optional window

この関数はwindowの親ウィンドウ(parent window)をリターンする。windowが省略またはnilの場合のデフォルトは選択されたウィンドウ。windowが親をもたない場合(ミニバッファーウィンドウやそのフレームのルートウィンドウ)にはリターン値はnil

親ウィンドウは常に最低でも2つの子ウィンドウをもちます。ウィンドウ削除(Deleting Windowsを参照)によりこの数値が1になると、Emacsは自動的に親ウィンドウも削除して、その1つだけ残った子ウィンドウがウィンドウツリー内のその位置に配置されます。

子ウィンドウは生きたウィンドウ、または(次に自身の子ウィンドウをもつであろう)内部ウィンドウのいずれかです。したがって各内部ウィンドウは、最終的にはその内部ウィンドウの子孫であるような生きたウィンドウにより占有される領域を結合した、特定の矩形スクリーン領域(screen area)を占有すると考えることができます。

内部ウィンドウそれぞれにたいして、近接する子たちのスクリーン領域は垂直(vertically)か水平(horizontally)のいずれかにより整列されます(両方で整列されることはない)。子ウィンドウが他の子ウィンドウと上下に整列される場合、それらは垂直コンビネーション(vertical combination)、左右に整列される場合は水平コンビネーション(horizontal combination)を形成すると表現されます。以下の例で考えてみましょう:

     ______________________________________
    | ______  ____________________________ |
    ||      || __________________________ ||
    ||      |||                          |||
    ||      |||                          |||
    ||      |||                          |||
    ||      |||____________W4____________|||
    ||      || __________________________ ||
    ||      |||                          |||
    ||      |||                          |||
    ||      |||____________W5____________|||
    ||__W2__||_____________W3_____________ |
    |__________________W1__________________|

このフレームのルートウィンドウは内部ウィンドウW1です。これの子ウィンドウは、生きたウィンドウW2と内部ウィンドウW3からなる水平コンビネーションを形成します。W3の子ウィンドウは、生きたウィンドウW4W5からなる垂直コンビネーションを形成します。したがって、このウィンドウツリー内の生きたウィンドウはW2W4、およびW5です。

以下の関数は内部ウィンドウの子ウィンドウ、および子ウィンドウの兄弟を取得するために使用できます。これらの関数のwindow引数のデフォルトは常に選択されたウィンドウです(Selecting Windowsを参照)。

Function: window-top-child &optional window

この関数は内部ウィンドウwindowの子ウィンドウが垂直コンビネーションを形成する場合には、windowの一番上の子ウィンドウをリターンする。他のタイプのウィンドウにたいするリターン値はnil

Function: window-left-child &optional window

この関数は内部ウィンドウwindowの子ウィンドウが水平コンビネーションを形成する場合には、windowの一番左の子ウィンドウをリターンする。他のタイプのウィンドウにたいするリターン値はnil

Function: window-child window

この関数は内部ウィンドウwindowの最初の子ウィンドウをリターンする。これは垂直コンビネーションにたいしては一番上、水平コンビネーションにたいしては一番左の子ウィンドウ。windowが生きたウィンドウならリターン値はnil

Function: window-combined-p &optional window horizontal

この関数はwindowが垂直コンビネーションの一部である場合のみ非nilをリターンする。

オプション引数horizontalが非nilなら、windowが水平コンビネーションの一部である場合のみ非nilをリターンすることを意味する。

Function: window-next-sibling &optional window

この関数は指定されたwindowの次の兄弟をリターンする。windowがその親の最後の子ならリターン値はnil

Function: window-prev-sibling &optional window

この関数はウィンドウwindowの前の兄弟をリターンする。windowがその親の最初の子ならリターン値はnil

関数window-next-siblingwindow-prev-siblingを、ウィンドウのサイクル順(Cyclic Window Orderingを参照)で次や前のウィンドウをリターンする関数next-windowprevious-windowと混同しないでください。

以下の関数はフレーム内のウィンドウの配置に有用です。

Function: frame-first-window &optional frame-or-window

この関数はframe-or-windowにより指定されたフレームの左上隅の生きたウィンドウをリターンする。引数frame-or-windowはウィンドウか生きたフレームを指定しなければならず、デフォルトは選択されたフレーム。frame-or-windowがウィンドウを指定する場合には、この関数はそのウィンドウのフレームの最初のウィンドウをリターンする。前の例のフレームが(frame-first-window)で選択されたとするとW2がリターンされる。

Function: window-at-side-p &optional window side

この関数はwindowのフレーム内でwindowsideに配置されていればtをリターンする。引数windowは有効なウィンドウでなければならず、デフォルトは選択されたウィンドウ。引数sideはシンボルlefttoprightbottomのいずれか。デフォルト値のnilbottomとして扱われる。

この関数はミニバッファーウィンドウを無視することに注意(Minibuffer Windowsを参照)。したがってsidebottomなら、windowの右下にミニバッファーウィンドウがある際にもtをリターンするかもしれない。

Function: window-in-direction direction &optional window ignore sign wrap minibuf

この関数はウィンドウwindow内の位置window-pointから、方向directionにあるもっとも近い生きたウィンドウをリターンする。引数directionabovebelowleftrightのいずれかでなければならない。オプション引数windowは生きたウィンドウでなければならず、デフォルトは選択されたウィンドウ。

この関数はパラメーターno-other-windowが非nilのウィンドウをリターンしない(Window Parametersを参照)。もっとも近いウィンドウのno-other-windowパラメーターが非nilなら、この関数は指定された方向でno-other-windowパラメーターがnilであるような他のウィンドウを探す。オプション引数ignoreが非nilなら、たとえno-other-windowパラメーターが非nilのウィンドウでもリターンされるだろう。

オプション引数signが負の数値なら、それは参照位置としてwindow-pointのかわりにwindowの右端、または下端を使用することを意味する。signが正の数値なら、それは参照位置としてwindowの左端か上端を使用することを意味する。

オプション引数wrapが非nilなら、それはフレームのボーダー(borders: 枠線)をdirectionがラップアラウンド(wrap around: 最後に達したら最初に戻る)することを意味する。たとえばwindowはフレームの最上にありdirectionaboveなら、そのフレームのミニバッファーウィンドウがアクティブでそれがフレームの他のウィンドウの最下にある場合には、この関数は通常はミニバッファーウィンドウをリターンする。

オプション引数minibuftなら、ミニバッファーウィンドウが非アクティブでもこの関数はそれをリターンするかもしれない。nilならカレントでアクティブな場合のみミニバッファーウィンドウをリターンすることを意味する。niltのいずれでもなければ、この関数がミニバッファーウィンドウをリターンすることはない。しかしwrapが非nilなら、常にminibufnilであるかのように振る舞う。

適切なウィンドウが見つからなければ、この関数はnilをリターンする。

この関数をdirectionにウィンドウが存在しないかどうかをチェックするために使用しないこと。それを行うには上述のwindow-at-side-pを呼び出すほうが効果的である。

以下の関数はフレームのウィンドウツリー全体を取得します:

Function: window-tree &optional frame

この関数はフレームframeにたいするウィンドウツリーを表すリストをリターンする。frameが省略nilの場合のデフォルトは選択されたフレーム。

リターン値は(root mini)という形式のリスト。ここでrootはそのフレームのウィンドウツリーのルートウィンドウ、miniはそのフレームのミニバッファーウィンドウを表す。

ルートウィンドウが生きていればrootはそのウィンドウ自身、それ以外ならrootはリスト(dir edges w1 w2 ...)。ここでdirは水平コンビネーションならnil、垂直コンビネーションならtとなり、edgesはそのコンビネーションのサイズと位置を与え、残りの要素は子ウィンドウである。子ウィンドウはそれぞれ、同じようにウィンドウオブジェクト(生きたウィンドウにたいして)、または上記フォーマットと同じ形式のリスト(内部ウィンドウにたいして)かもしれない。edges要素はwindow-edgesがリターンする値のようなリスト(left top right bottom) (Coordinates and Windowsを参照)。