Next: Window Parameters, Previous: Coordinates and Windows, Up: Windows [Contents][Index]
ウィンドウ構成(window configuration)とは1つのフレーム上全体のレイアウト —
すべてのウィンドウ、およびそれらのサイズ、どんなバッファーを含んでいるか、それらのバッファーがスクロールされる方法、ポイント値とマーク値を記録し、フリンジ、マージン、スクロールバーのセッティングも記録します。これにはminibuffer-scroll-windowの値も含まれます。特別な例外として、ウィンドウ構成には選択されたウィンドウのカレントバッファーのポイント値は記録されません。
以前に保存されたウィンドウ構成をリストアすることにより、フレーム全体のレイアウトを取り戻すことができます。1つだけではなくすべてのフレームのレイアウトを記録したい場合は、ウィンドウ構成のかわりに、フレーム構成(frame configuration)を使用します。Frame Configurationsを参照してください。
この関数は、frameのカレントのウィンドウ構成を表す新たなオブジェクトをリターンする。frameのデフォルトは選択されたフレームである。変数window-persistent-parametersは、この関数により保存されるウィンドウパラメーター(もしあれば)を指定する。Window Parametersを参照のこと。
この関数は、configurationが作成されたフレームにたいして、ウィンドウとバッファーの構成をconfigurationで指定された構成にリストアする。
引数configurationは、以前にcurrent-window-configurationがリターンした値でなければならない。この構成は、そのフレームが選択されているか否かに関わらず、configurationが作成時のフレームから、当該フレームにリストアされる。これは常にウィンドウのサイズ変更とみなされ、window-size-change-functions(Window Hooksを参照)の実行をトリガーする。なぜなら、set-window-configurationは、新たな構成が古い構成と実際に異なるかを示す方法を知らないからである。
configurationが保存されたフレームが死んでいる(生きていない)場合、この関数が行うのは3つの変数window-min-height、window-min-width、minibuffer-scroll-windowのリストアだけである。この場合、関数はnilをリターンし、それ以外はtをリターンする。
以下は、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内で新たなウィンドウをオープンするコードを確実に防ぐことができず、新たなウィンドウは別のフレーム内でオープンされるかもしれないが(Choosing Windowを参照)、save-window-excursionが保存およびリストアするのは、カレントフレーム上のウィンドウ構成だけだからである。
このマクロをwindow-size-change-functions内で使用してはならない。このマクロをexitすることによりwindow-size-change-functionsの実行がトリガーされるが、これは無限ループを引き起こす。
この関数は、objectがウィンドウ構成ならtをリターンする。
この関数は、ポイント値、マーク値、保存されたスクロール位置を無視して(これらの観点が異なってもtをリターンし得る)、ウィンドウ構造の観点から2つのウィンドウ構成を比較する。
関数equalも2つのウィンドウ構成を比較できる。これはすべての点から、たとえ1つでも異なるものがあれば等しい構成とはみなさず、たとえ保存されたポイント値やマーク値が異なるだけでも、等しくないとみなす。
この関数は、ウィンドウ構成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 Parametersを参照のこと。
window-state-getによりリターンされる値は、同一セッション内の他のウィンドウ内にあるウィンドウのクローンを作成するために使用できます。これはディスクに書き込んで、別のセッションに読み戻すこともできます。どちらの場合でも、ウィンドウの状態をリストアするためには以下の関数を使用します。
この関数は、ウィンドウ状態stateをwindow内にputする。引数stateは以前に呼び出したwindow-state-getがリターンしたウィンドウ状態であること。オプション引数windowには生きたウィンドウ、または内部ウィンドウ(Windows and Framesを参照)のいずれかを指定でき、デフォルトは選択されたウィンドウである。windowが生きていない場合は、stateをputする前に生きたウィンドウに置き換える。
オプション引数ignoreが非nilの場合、それは最小ウィンドウサイズと固定サイズの制限を無視することを意味する。ignoreがsafeなら、それは1行および/または2列まで、できる限り小さくできることを意味する。