各ウィンドウは、ちょうど1つのフレームに属します(フレームを参照)。特定のフレームに属するすべてのウィンドウについて、これらのウィンドウがそのフレームに所有されている、あるいは単にそのフレーム上にあると表現することもあります。
この関数は、指定された window のフレーム(window が属するフレーム)を返します。window
が省略された場合、または nil が指定された場合は、選択中のウィンドウがデフォルトとなります(ウィンドウの選択 を参照)。
この関数は、指定された frame が所有するすべてのライブウィンドウのリストを返します。frame が省略された場合、または nil
が指定された場合は、選択中のフレームがデフォルトとなります(入力フォーカス を参照)。
オプション引数 minibuffer は、ミニバッファウィンドウ(ミニバッファウィンドウ を参照)をそのリストに含めるかどうかを指定します。minibuffer が t
の場合、ミニバッファウィンドウが含まれます。nil
が指定されているか、あるいは省略された場合、ミニバッファウィンドウはアクティブな場合にのみ含まれます。minibuffer が nil でも t でもない場合、ミニバッファウィンドウは決して含まれません。
オプション引数 window が nil
以外の場合、指定されたフレーム上のアクティブなウィンドウである必要があります。その場合、window
が返されるリストの最初の要素となります。window が省略された場合、または nil が指定された場合は、frame
内で選択されたウィンドウ(ウィンドウの選択
を参照)が最初の要素となります。
同一フレーム上のウィンドウはウィンドウツリーとして構成され、そのリーフノードがライブウィンドウとなります。ウィンドウツリーの内部ノードはライブウィンドウではなく、ライブウィンドウ間の関係を整理する目的で存在します。ウィンドウツリーのルートノードはルートウィンドウと呼ばれます。これはライブウィンドウか内部ウィンドウのいずれかです。ライブウィンドウである場合、そのフレームにはミニバッファウィンドウ以外にウィンドウが1つしかないか、あるいはそのフレームがミニバッファ専用フレームとなります(フレームレイアウトを参照)。
フレーム内に単独で存在しないミニバッファウィンドウ(ミニバッファウィンドウを参照)は、親ウィンドウを持たないため、厳密に言えばそのフレームのウィンドウツリーの一部ではありません。とはいえ、これはフレームのルートウィンドウの兄弟ウィンドウであり、したがってルートウィンドウからwindow-next-sibling経由でアクセス可能です(後述)。また、本節の最後で説明する関数window-treeは、実際のウィンドウツリーと並んでミニバッファウィンドウを列挙します。
この関数は frame-or-window のルートウィンドウを返します。引数 frame-or-window にはウィンドウまたはフレームを指定します。省略した場合や nil を指定した場合は、選択中のフレームがデフォルトとなります。frame-or-window
がウィンドウである場合、戻り値はそのウィンドウのフレームのルートウィンドウとなります。
ライブウィンドウを分割すると(ウィンドウの分割を参照)、以前は1つだったライブウィンドウが2つになります。そのうちの1つは元のウィンドウと同じLispウィンドウオブジェクトで表され、もう1つは新たに作成されたLispウィンドウオブジェクトで表されます。これら両方のライブウィンドウは、単一の内部ウィンドウの子ウィンドウとして、ウィンドウツリーのリーフノードになります。必要に応じて、Emacsはこの内部ウィンドウ(親ウィンドウとも呼ばれます)を自動的に作成し、ウィンドウツリーの適切な位置に配置します。同じ親を持つウィンドウの集合は、兄弟と呼ばれます。
この関数は window の親ウィンドウを返します。window が省略された場合や nil
が指定された場合は、選択中のウィンドウがデフォルトとなります。window
に親がない場合(すなわちミニバッファウィンドウまたはそのフレームのルートウィンドウである場合)、戻り値は nil となります。
親ウィンドウには常に少なくとも2つの子ウィンドウが存在します。ウィンドウの削除(ウィンドウの削除を参照)によってこの数が1つになった場合、Emacsは自動的に親ウィンドウも削除し、唯一残った子ウィンドウがウィンドウツリーにおけるその位置を引き継ぎます。
子ウィンドウには、ライブウィンドウと内部ウィンドウ(さらに独自の子ウィンドウを持つ)のいずれかがあります。したがって、各内部ウィンドウはある矩形の画面領域――最終的にそこから派生するライブウィンドウが占める領域の和集合――を占有していると考えることができます。
各内部ウィンドウにおいて、直下の子ウィンドウの画面領域は、垂直方向または水平方向のいずれかに配置されます(両方に配置されることはありません)。子ウィンドウが上下に配置されている場合は垂直組み合わせ、左右に配置されている場合は水平組み合わせを形成すると言います。次の例を考えてみましょう。
______________________________________
| ______ ____________________________ |
|| || __________________________ ||
|| ||| |||
|| ||| |||
|| ||| |||
|| |||____________W4____________|||
|| || __________________________ ||
|| ||| |||
|| ||| |||
|| |||____________W5____________|||
||__W2__||_____________W3_____________ |
|__________________W1__________________|
このフレームのルートウィンドウは、内部ウィンドウ W1 です。その子ウィンドウは、ライブウィンドウ W2 と内部ウィンドウ W3 からなる水平方向の組み合わせを形成しています。W3 の子ウィンドウは、ライブウィンドウ W4 と W5 からなる垂直方向の組み合わせを形成しています。したがって、このウィンドウツリーにおけるライブウィンドウは W2、W4、および W5 となります。
以下の関数を使用すると、内部ウィンドウの子ウィンドウや、子ウィンドウの兄弟ウィンドウを取得できます。これらの関数の window 引数は、常に選択中のウィンドウがデフォルトとなります(ウィンドウの選択を参照)。
この関数は、window が子ウィンドウで垂直方向に組み合わさった内部ウィンドウである場合、window の最前面にある子ウィンドウを返します。それ以外の種類のウィンドウの場合、戻り値は nil となります。
この関数は、window が子ウィンドウで水平方向の組み合わせを形成する内部ウィンドウである場合、window の最も左側にある子ウィンドウを返します。それ以外の種類のウィンドウの場合、戻り値は nil となります。
この関数は、内部ウィンドウ window
の最初の子ウィンドウ(垂直結合の場合は最上部の子ウィンドウ、水平結合の場合は最左端の子ウィンドウ)を返します。window がライブウィンドウである場合、戻り値は nil
となります。
この関数は、window が垂直結合の一部である場合に限り、nil 以外の値を返します。
オプション引数 horizontal が nil
以外である場合、これは window が水平結合の一部である場合に限り、nil 以外を返すことを意味します。
この関数は、指定された window の次の兄弟要素を返します。window が親要素の最後の子要素である場合、戻り値は nil
となります。
この関数は、指定された window の直前の兄弟要素を返します。window が親要素の最初の子要素である場合、戻り値は nil
となります。
関数 window-next-sibling および window-prev-sibling
を、ウィンドウの循環順列における次のウィンドウおよび前のウィンドウを返す関数 next-window
および previous-window と混同しないようにしてください(ウィンドウの循環順列 を参照)。
フレーム内でウィンドウの位置を特定するには、以下の関数が便利です。
この関数は、frame-or-window
で指定されたフレームの左上隅にあるライブウィンドウを返します。引数 frame-or-window
はウィンドウまたはライブフレームを指定する必要があり、デフォルトでは選択中のフレームとなります。frame-or-window
でウィンドウが指定された場合、この関数はそのウィンドウのフレーム内にある最初のウィンドウを返します。正準例のフレームが選択されていると仮定すると、(frame-first-window) は W2 を返します。
この関数は、window が包含フレームの side
に位置している場合に t を返します。引数 window は有効なウィンドウである必要があり、デフォルトでは選択中のウィンドウが指定されます。引数 side には、シンボル left、top、right、または bottom のいずれかを指定できます。デフォルト値 nil
は bottom と同様に扱われます。
なお、この関数はミニバッファウィンドウを無視します(ミニバッファウィンドウを参照)。したがって、side が bottom
と等しい場合、ミニバッファウィンドウが window の直下に表示されていても、t を返すことがあります。
この関数は、window の点の位置から見た方向 direction における最も近いアクティブウィンドウを返します(ウィンドウと点 を参照)。引数 direction は、above、below、left、または right のいずれかである必要があります。オプション引数 window はアクティブウィンドウを指定する必要があり、デフォルトでは選択中のウィンドウが指定されます。
この関数は、window-no-other-p(ウィンドウの循環順序を参照)がnil以外を返すウィンドウを返しません。最も近いウィンドウのno-other-windowパラメータがnil以外である場合、この関数は指定された方向において、no-other-windowパラメータがnilである別のウィンドウを探そうとします。ただし、オプション引数ignoreがnil以外である場合は、no-other-windowパラメータがnil以外であってもウィンドウが返されることがあります。
オプション引数 sign が負の数の場合、window-point の代わりに window
の右端または下端を参照位置として使用します。sign が正の数の場合、window の左端または上端を参照位置として使用します。
オプション引数 wrap が nil
以外の場合、これは direction をフレームの枠線で囲むことを意味します。例えば、window がフレームの上部にあり、direction が
above
である場合、この関数は通常、フレームのミニバッファウィンドウがアクティブであればそれを、そうでなければフレーム下部のウィンドウを返します。
オプション引数 minibuf が t
の場合、この関数はミニバッファウィンドウがアクティブでないときでも、それを返すことがあります。オプション引数 minibuf が nil
の場合、これはミニバッファウィンドウが現在アクティブである場合に限り、それを返すことを意味します。minibuf が nil でも t でもない場合、この関数がミニバッファウィンドウを返すことはありません。ただし、wrap が nil 以外である場合、常に minibuf が nil であるかのように動作します。
適切なウィンドウが見つからない場合、この関数は nil を返します。
この関数を使って direction にウィンドウがないかどうかを判定しないでください。前述の window-at-side-p を呼び出す方が、はるかに効率的な方法です。
以下の関数は、フレームのウィンドウツリー全体を取得します:
この関数は、フレーム frame のウィンドウツリーを表すリストを返します。frame が省略された場合、または nil
が指定された場合は、選択中のフレームがデフォルトとなります。
戻り値は (root mini) 形式のリストであり、root
はフレームのルートウィンドウのウィンドウツリーを、mini はフレームのミニバッファウィンドウを表します。
ルートウィンドウがライブウィンドウである場合、rootはそのウィンドウ自身となります。そうでない場合、rootはリスト(dir
edges w1 w2 ...)となり、水平方向の組み合わせではdirがnil、垂直方向の組み合わせではtとなります。edgesは組み合わせのサイズと位置を指定し、残りの要素は子ウィンドウとなります。各子ウィンドウは、再びウィンドウオブジェクト(ライブウィンドウの場合)、または上記と同じ形式のリスト(内部ウィンドウの場合)となります。edges要素はリスト(left
top right bottom)であり、window-edgesが返す値と同様です(座標とウィンドウを参照)。