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


28.9 ウィンドウの選択

Function: select-window window &optional norecord

この関数はwindowを選択されたウィンドウにすることによりそのフレーム内で選択されたウィンドウ(Basic Windowsを参照)として、そのフレームを選択する。またwindowのバッファー(Buffers and Windowsを参照)をカレントにして、そのバッファーのpointの値(Window Pointを参照)をwindowwindow-pointの値にセットする。windowは生きたウィンドウでなければならない。リターン値はwindow

デフォルトではこの関数はwindowのバッファーをバッファーリストの先頭(Buffer Listを参照)に移動して、windowをもっとも最近選択されたウィンドウにする。オプション引数norecordが非nilなら、これらの追加処理は省略される。

加えてこの関数はデフォルトではwindowのフレームの次回再表示の際にwindowを更新するようにディスプレイエンジンに指示する。norecordが非nilなら、そのような更新は通常は行わない。しかしnorecordが特別なシンボルmark-for-redisplayと等しければ上述の追加アクションは省略されるが、それにも関わらずwindowは更新される。

ウィンドウを選択することではウィンドウの表示やそのフレームをディスプレイ上の最上フレームにすることを満足しない場合があることに注意。さらにそのフレームのレイズやフレームにフォーカスが当たることを確実にする必要もあるだろう。Input Focusを参照のこと。

歴史的な理由によりウィンドウ選択時にEmacsが個別にフックを実行することはありません。アプリケーションや内部ルーチンがあるウィンドウ上でいくつかの処理を行うために一時的にウィンドウを選択することはよくあります。これらはwindow引数が何も指定されていなければデフォルトでは選択されたウィンドウを処理する関数が多数存在するのでコーディングを単純化するために、あるいは引数としてウィンドウを受け取らないために常に選択されたウィンドウを処理する関数がいくつか存在した(そして今も存在する)ためにこれを行います。あるウィンドウが短時間選択されたときと、以前に選択されていたウィンドウがリストアされるたびに毎回フックを実行するのは有用ではありません。

しかしnorecord引数がnilの際にはselect-windowがバッファーリストを更新するので、間接的にノーマルフックbuffer-list-update-hookが実行されます(Buffer Listを参照)。結果としてこのフックは、あるウィンドウがより“永続的”に選択された際に関数を実行する1つの手段を提供します。

buffer-list-update-hookはウィンドウ管理とは無関係な関数によっても実行されるので、選択されたウィンドウの値を何かに保存しておいて、このフックの実行中にselected-windowの値と比較することには意味があります。buffer-list-update-hookを使用する際の誤検出を防ぐためにも、一時的にのみウィンドウの選択を意図するselect-windowの呼び出しごとにnorecord引数に非nilを渡すことはよい習慣です。そのような場合にはマクロwith-selected-window (以下参照)を使用するべきです。

最後の再表示以降に別ウィンドウが選択されたことを再表示ルーチンが検知した際には、常にEmacsはフックwindow-selection-change-functionsも実行します。詳細な説明はWindow Hooksを参照してください。(同じセクションに記載されている) window-state-change-functionsは別ウィンドウ選択後に実行される別のアブノーマルフックですが、これは他のウィンドウの変更時にも同様にトリガーされます。

引数norecordに非nilを指定したselect-windowの連続呼び出しは、ウィンドウの並び順を選択時刻により決定します。関数get-lru-windowは、もっとも昔に選択された生きたウィンドウ(Cyclic Window Orderingを参照)を取得するために使用できます。

Macro: save-selected-window forms…

このマクロは選択されたフレーム、同様に各フレームの選択されたウィンドウを記録して、formsを順に実行してから以前に選択されていたフレームとウィンドウをリストアする。これはカレントバッファーの保存とリストアも行う。リターン値はforms内の最後のフォームの値。

このマクロはウィンドウのサイズ、コンテンツ、配置についての保存やリストアは何も行わない。したがってformsがそれらを変更すると、その変更は永続化される。あるフレームにおいて以前に選択されていたウィンドウがformsのexit時にすでに生きていなければ、そのフレームの選択されたウィンドウはそのまま放置される。以前に選択されていたウィンドウがすでに生きていなければformsの最後に選択されていたウィンドウが何であれ、それが選択されたままになる。カレントバッファーformsのexit時にそれが生きている場合のみリストアされる。

このマクロは、もっとも最近に選択されたウィンドウとバッファーリストの順番をいずれも変更しない。

Macro: with-selected-window window forms…

このマクロはwindowを選択してformsを順に実行してから、以前に選択されていたウィンドウとカレントバッファーをリストアする。たとえば引数norecordnilselect-windowを呼び出す等、forms内で故意に変更しない限り、もっとも最近に選択されたウィンドウとバッファーリストの順番は変更されない。したがってこのマクロは不要なbuffer-list-update-hookの実行なしに、windowを選択されたウィンドウとして一時的に作業するために好ましい手段である。

Function: frame-selected-window &optional frame

この関数はフレームframe内で選択されているウィンドウをリターンする。frameは生きたフレームであること。省略またはnilの場合のデフォルトは選択されたフレーム。

Function: set-frame-selected-window frame window &optional norecord

この関数はwindowをフレームframe内で選択されたウィンドウにする。frameは生きたフレームであること。省略またはnilの場合のデフォルトは選択されたフレーム。windowは生きたウィンドウであること。省略またはnilの場合のデフォルトは選択されたウィンドウ。

frameが選択されたフレームなら、windowを選択されたウィンドウにする。

オプション引数norecordが非nilなら、この関数はもっとも最近に選択されたウィンドウのリストとバッファーリストをいずれも変更しない。

Function: window-use-time &optional window

この関数はウィンドウwindowの使用回数をリターンする。windowは生きたウィンドウでなければならずデフォルトは選択されたウィンドウ。

ウィンドウの使用回数(use time)は実際にはtime値ではなく、nilnorecord引数によるselect-windowの呼び出しごとに毎回単調に増加する整数。通常は最小の使用回数をもつウィンドウはもっとも最近使用されていないウィンドウ(the least recently used window)、最大の使用回数をもつウィンドウはもっとも最近使用されたウィンドウ(the most recently used window)と呼ばれる(Cyclic Window Orderingを参照)。