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


27.25 ウィンドウの構成

ウィンドウ構成(window configuration)とは1つのフレーム上全体のレイアウト — すべてのウィンドウとサイズ、どんなバッファーを含んでいるか、それらのバッファーがスクロールされる方法、およびポイント値を記録して、更にフリンジ、マージン、スクロールバーのセッティングも記録します。これにはminibuffer-scroll-windowの値も含まれます。特別な例外としてウィンドウ構成には選択されたウィンドウのカレントバッファーのポイント値は記録されません。

以前に保存されたウィンドウ構成をリストアすることにより、フレーム全体のレイアウトをリストアすることができます。1つだけではなくすべてのフレームのレイアウトを記録したければ、ウィンドウ構成のかわりにフレーム構成(frame configuration)を使用します。Frame Configurationsを参照してください。

Function: current-window-configuration &optional frame

この関数はframeのカレントのウィンドウ構成を表す新たなオブジェクトをリターンする。frameのデフォルトは選択されたフレーム。変数window-persistent-parametersはこの関数により保存されるウィンドウパラメーター(もしあれば)を指定する。Window Parametersを参照のこと。

Function: set-window-configuration configuration

この関数はconfigurationが作成されたフレームにたいして、ウィンドウとバッファーの構成をconfigurationで指定された構成にリストアする。

引数configurationは以前にcurrent-window-configurationがリターンした値でなければならない。この構成はそのフレームが選択されているか否かに関わらず、configurationが作成時のフレームから当該フレームにリストアされる。これは常にウィンドウのサイズ変更とみなされて、window-size-change-functions (Window Hooksを参照)の実行をトリガーする。なぜならset-window-configurationは新たな構成が古い構成と実際に異なるかを示す方法を知らないからである。

configurationが保存されたフレームが死んでいる(生きていない)場合には、この関数が行うのは3つの変数window-min-heightwindow-min-widthminibuffer-scroll-windowのリストアのみ。この場合には関数はnil、それ以外はtをリターンする。

以下はsave-window-excursionと同様な効果を得るためにこの関数を使用する例:

(let ((config (current-window-configuration)))
  (unwind-protect
      (progn (split-window-below nil)
             …)
    (set-window-configuration config)))
Macro: save-window-excursion forms…

このマクロは選択されたフレームのウィンドウ構成を記録して、formsを順に実行してから以前のウィンドウ構成をリストアする。リターン値はforms内の最後のフォームの値。

Lispコードのほとんどはこのマクロを使用するべきではない。大抵はsave-selected-windowで十分であろう。特にこのマクロはforms内で新たなウィンドウをオープンするコードを確実に防ぐことができず、新たなウィンドウは別のフレーム内でオープンされるかもしれないが(Choosing Windowを参照)、save-window-excursionが保存とリストアするのはカレントフレーム上のウィンドウ構成だけだからである。

このマクロをwindow-size-change-functions内で使用してはならない。このマクロをexitすることによりwindow-size-change-functionsの実行がトリガーされるが無限ループを引き起こす。

Function: window-configuration-p object

この関数はobjectがウィンドウ構成ならtをリターンする。

Function: compare-window-configurations config1 config2

この関数はポイント値、保存されたスクロール位置を無視して(つまりこれらの観点が異なってもtをリターンし得る)、ウィンドウ構造の観点から2つのウィンドウ構成を比較する。

関数equalも2つのウィンドウ構成を比較できる。これはすべての点からたとえ1つでも異なるものがあれば等しい構成とはみなさず、たとえ保存されたポイント値が異なるだけでも等しくないとみなす。

Function: window-configuration-frame config

この関数はウィンドウ構成configが作成されたフレームをリターンする。

ウィンドウ構成の内部を調べる他のプリミティブも有用かもしれませんが、わたしたちはこれらを必要としないので実装されていません。ウィンドウ構成にたいしてより多くの操作を知りたければ、ファイルwinner.elを参照してください。

current-window-configurationがリターンするオブジェクトはEmacsプロセスとともに死滅します。ウィンドウ構成をディスク上に格納してそれを別のEmacsセッションに読み戻すために、次に説明する関数を使用できます。これらの関数はフレームの状態を任意の生きたウィンドウにクローンする場合にも有用です(set-window-configurationはフレームのウィンドウをそのフレームのルートウィンドウだけに効果的にクローンする)。

Function: window-state-get &optional window writable

この関数はwindowの状態をLispオブジェクトとしてリターンする。引数windowは有効なウィンドウでなければならずデフォルトは選択されたフレームのルートウィンドウ。

オプション引数writableが非nilなら、それはwindow-pointwindow-startのようなサンプリング位置にたいするマーカーを使用しないことを意味する。この状態をディスクに書き込んで別のセッションに読み戻すなら、この引数は非nilであること。

この関数によりどのウィンドウパラメーターが保存されるかは、引数writableと変数window-persistent-parametersの両方で指定する。Window Parametersを参照のこと。

window-state-getによりリターンされる値は、同一セッション内の他のウィンドウ内にあるウィンドウのクローンを作成するために使用できます。これはディスクに書き込んで別のセッションに読み戻すこともできます。いずれの場合にもウィンドウの状態をリストアするためには以下の関数を使用します。

Function: window-state-put state &optional window ignore

この関数はウィンドウ状態statewindow内にputする。引数stateは以前に呼び出したwindow-state-getがリターンしたウィンドウ状態であること。オプション引数windowには生きたウィンドウか内部ウィンドウ(Windows and Framesを参照)のいずれかを指定でき、デフォルトは選択されたウィンドウ。windowが生きていなければ、stateをputする前に生きたウィンドウに置き換える。

オプション引数ignoreが非nilなら、それは最小ウィンドウサイズと固定サイズの制限を無視することを意味する。ignoresafeなら、それは1行および/または2列までできる限り小さくできることを意味する。