ウィンドウ構成(window configuration)とは1つのフレーム上全体のレイアウト —
すべてのウィンドウとサイズ、どんなバッファーを含んでいるか、それらのバッファーがスクロールされる方法、およびポイント値を記録して、更に装飾も記録します。これにはminibuffer-scroll-window
の値も含まれます。特別な例外としてウィンドウ構成には選択されたウィンドウのカレントバッファーのポイント値は記録されません。
以前に保存されたウィンドウ構成をリストアすることにより、フレーム全体のレイアウトをリストアすることができます。1つだけではなくすべてのフレームのレイアウトを記録したければ、ウィンドウ構成のかわりにフレーム構成(frame configuration)を使用します。フレーム構成を参照してください。
この関数はframeのカレントのウィンドウ構成を表す新たなオブジェクトをリターンする。frameのデフォルトは選択されたフレーム。変数window-persistent-parameters
はこの関数により保存されるウィンドウパラメーター(もしあれば)を指定する。ウィンドウのパラメーターを参照のこと。
この関数はconfigurationが作成されたフレームにたいして、そのフレームが選択されているかどうかに関わらず、ウィンドウとバッファーの構成をconfigurationで指定された構成にリストアする。引数configurationはそのフレームにたいして以前にcurrent-window-configuration
がリターンした値でなければならない。この関数は通常は構成に記録されているフレームも選択するが、dont-set-frameが非nil
なら関数の開始にすでに選択されていたフレームを選択したままにする。
この関数は通常はミニバッファー(もしあれば)のリストアと保存を行うが、dont-set-miniwindowが非nil
なら関数の開始でカレントだったミニバッファー(もしあれば)はミニウィンドウ内に残る。
configurationが保存されたフレームが死んでいる(生きていない)場合には、この関数が行うのは変数minibuffer-scroll-window
の値のリストア、minibuffer-selected-window
がリターンした値の調整のみ。この場合には関数はnil
、それ以外はt
をリターンする。
この関数はconfigurationの記録後にkillされたバッファーのウィンドウのリストアを試みる際に、変数window-restore-killed-buffer-windows
(以下参照)を調べる。
以下はsave-window-excursion
と同様な効果を得るためにこの関数を使用する例:
(let ((config (current-window-configuration))) (unwind-protect (progn (split-window-below nil) ...) (set-window-configuration config)))
このマクロは選択されたフレームのウィンドウ構成を記録して、formsを順に実行してから以前のウィンドウ構成をリストアする。リターン値はforms内の最後のフォームの値。
Lispコードのほとんどはこのマクロを使用するべきではない。大抵はsave-selected-window
で十分であろう。特にこのマクロはforms内で新たなウィンドウをオープンするコードを確実に防ぐことができず、新たなウィンドウは別のフレーム内でオープンされるかもしれないが(バッファーを表示するウィンドウの選択を参照)、save-window-excursion
が保存とリストアするのはカレントフレーム上のウィンドウ構成だけだからである。
この関数はobjectがウィンドウ構成ならt
をリターンする。
この関数は2つのウィンドウ構成のウィンドウレイアウトが同じかどうかを判断するが、ポイント値および保存されたスクロール位置は無視される(つまりこれらの点では異なるウィンドウ構成であってもt
をリターンし得る)。
この関数はウィンドウ構成configが作成されたフレームをリターンする。
ウィンドウ構成の内部を調べる他のプリミティブも有用かもしれませんが、わたしたちはこれらを必要としないので実装されていません。ウィンドウ構成にたいしてより多くの操作を知りたければ、ファイルwinner.elを参照してください。
current-window-configuration
がリターンするオブジェクトはEmacsプロセスとともに死滅します。ウィンドウ構成をディスク上に格納してそれを別のEmacsセッションに読み戻すために、次に説明する関数を使用できます。これらの関数はフレームの状態を任意の生きたウィンドウにクローンする場合にも有用です(set-window-configuration
はフレームのウィンドウをそのフレームのルートウィンドウだけに効果的にクローンする)。
この関数はwindowの状態をLispオブジェクトとしてリターンする。引数windowは有効なウィンドウでなければならずデフォルトは選択されたフレームのルートウィンドウ。
オプション引数writableが非nil
なら、それはwindow-point
やwindow-start
のようなサンプリング位置にたいするマーカーを使用しないことを意味する。この状態をディスクに書き込んで別のセッションに読み戻すなら、この引数は非nil
であること。
この関数によりどのウィンドウパラメーターが保存されるかは、引数writableと変数window-persistent-parameters
の両方で指定する。ウィンドウのパラメーターを参照のこと。
window-state-get
によりリターンされる値は、同一セッション内の他のウィンドウ内にあるウィンドウのクローンを作成するために使用できます。これはディスクに書き込んで別のセッションに読み戻すこともできます。いずれの場合にもウィンドウの状態をリストアするためには以下の関数を使用します。
この関数はウィンドウ状態stateをwindow内にputする。引数stateは以前に呼び出したwindow-state-get
がリターンしたウィンドウ状態であること。オプション引数windowには生きたウィンドウか内部ウィンドウ(ウィンドウとフレームを参照)のいずれかを指定できる。windowが生きていなければ、stateをputする前に生きたウィンドウに置き換える。windowが生きたウィンドウでなければ、それにstateをputする前に同一フレーム上に作成された新たな生きたウィンドウに置き換えられる。windowがnil
ならウィンドウの状態を新たなウィンドウにputする。
この関数はstateの記録後にkillされたバッファーのウィンドウのリストアを試みる際に、変数window-restore-killed-buffer-windows
(以下参照)を調べる。
オプション引数ignoreが非nil
なら、それは最小ウィンドウサイズと固定サイズの制限を無視することを意味する。ignoreがsafe
なら、それは1行および/または2列までできる限り小さくできることを意味する。
デフォルトではset-window-configuration
とwindow-state-put
は、対応する構成や状態が記録された後にバッファーがkillされたことが判ると、リストアされる構成からそれらのウィンドウを削除するかもしれません。次に説明する変数で、この挙動を微調整することができます。
この変数はset-window-configuration
およびwindow-state-put
にたいして、対応する構成や状態の記録後にkillされたバッファーのウィンドウをどのように処理するかを指定する。これらの関数いずれかが呼び出されたタイミングでは、そのようなウィンドウが生きている(別のバッファーを表示中)か、あるいは死んでいるウィンドウもあるかもしれない。通常だとset-window-configuration
はウィンドウが生きていればそのまま、window-state-put
はウィンドウを削除する。
以下の値を使えばset-window-configuration
での死んだウィンドウ、window-state-put
での死んだウィンドウと生きたウィンドウにたいするデフォルトの挙動をオーバーライドできる。
t
この値は無条件でウィンドウをリストアして何か別のバッファーを表示することを意味する。
delete
これは無条件でウィンドウの削除を試みることを意味する。
dedicated
これはウィンドウが表示中のバッファー専用のウィンドウの場合のみウィンドウの削除を試みることを意味する。
nil
これがデフォルトであり、set-window-configuration
ではウィンドウが表示中のバッファー専用の場合のみウィンドウを削除、window-state-put
では無条件でウィンドウの削除を試みることを意味する。
これは値がt
のときのようにウィンドウを削除して何か別のバッファーを表示して、さらに後でその関数の2つ目の引数として渡されることになるリストに、そのウィンドウにたいするエントリーの追加も行うことを意味する。
ウィンドウが削除できない場合(典型的にはそれがフレームの最後のウィンドウの場合)には、set-window-configuration
とwindow-state-put
はそのウィンドウに別のバッファーを表示するだろう。
この変数の値が関数なら、それは3つの引数を受け取る関数であること。1つ目の引数ではリストアされるウィンドウのフレームを指定する。3つ目の引数はset-window-configuration
によってリストアされたウィンドウならシンボルconfiguration
、window-state-put
によってリストアされたウィンドウならシンボルstate
を示す。
2つ目の引数にはset-window-configuration
またはwindow-state-put
がリストアを試みたタイミングで前のバッファーが死んでいることが判明したすべてのウィンドウ
(ミニバッファーウィンドウは除外)にたいするエントリーのリストを指定する。これはこの関数がset-window-configuration
が生きていると判断したウィンドウをも削除するかもしれないことを意味する。
この関数の2つ目の引数として渡されるこのリストのエントリー自体がそれぞれバッファーが死んでいると判明したウィンドウ、死んだバッファーまたはその名前、window-startの位置(ウィンドウの開始位置と終了位置を参照)、そのウィンドウのバッファーのwindow-point (ウィンドウとポイントを参照)、前にwindow-dedicated-p
によって報告されたそのウィンドウが専用かどうかの状態、、フラグ(set-window-configuration
が生きていると判断したウィンドウならt
、そうでなければnil
)のような6つの値からなるリストである。
関数window-state-get
とwindow-state-put
では2つの生きたウィンドウ間でのコンテンツの交換も可能です。以下は正にこれを正しく行うための関数です:
このコマンドは2つの生きたウィンドウwindow-1とwindow-2の状態を交換する。window-1には生きたウィンドウを指定しなければならずデフォルトは選択されたウィンドウ。window-2には生きたウィンドウを指定しなければならず、デフォルトはミニバッファーウィンドウを除き、すべての可視なフレーム上の生きたウィンドウを含むウィンドウサイクル順においてwindow-1の次のウィンドウ。
オプション引数sizeが非nil
なら、それはwindow-1とwindow-2のサイズも同様に交換を試みることを意味する。値height
は高さのみ、値width
は幅のみ、t
は幅と高さの両方を可能なら交換することを意味する。この関数はフレームをリサイズしない。