Next: Visibility of Frames, Previous: Minibuffers and Frames, Up: Frames [Contents][Index]
どんなときでもEmacs内のただ1つのフレームが選択されたフレーム(selected frame)です。選択されたウィンドウは常に選択されたフレーム上にあります。
Emacsがフレームを複数端末(Multiple Terminalsを参照)上に表示する際には、各端末は自身の選択されたフレームをもちます。しかしそれらのうち1つだけが、いわゆる選択されたフレームであり、それはもっとも最近に入力があった端末に属すフレームです。つまり特定の端末からのコマンドをEmacsが実行する際には、その端末上の1つが選択されたフレームです。Emacsが実行するコマンドは常に1つだけなので、選択されたフレームは常に1つだけだと考える必要があります。このフレームこそが、このマニュアルで選択されたフレームと呼ぶフレームです。選択されたフレームを表示するディスプレイは、選択されたフレームのディスプレイ(selected frame’s display)です。
この関数は選択されたフレームをリターンする。
いくつかのウィンドウシステムおよびウィンドウマネージャーは、マウスがあるウィンドウオブジェクトにキーボード入力をダイレクトします。それ以外は、さまざまなウィンドウオブジェクトにフォーカスをシフト(shift
the
focus)するために、明示的なクリックやコマンドを要求します。どちらの方法でもEmacsはフォーカスをもつフレームを自動的に追跡します。Lisp関数から別フレームに明示的に切り替えるためには、select-frame-set-input-focus
を呼び出します。
関数select-frame
を呼び出すことにより、Lispプログラムが一時的にフレームを切り替えることもできます。これはそのウィンドウシステムのフォーカス概念を変更はしません。変更ではなく何らかの方法により制御が再確認(reasserted)されるまで、ウィンドウマネージャーの制御から抜け出す(escape)のです。
テキスト端末使用時はその端末上で一度に表示できるフレームは1つだけなので、select-frame
呼び出し後に次回の再表示で新たに選択されたフレームが実際に表示されます。このフレームは次のselect-frame
呼び出しまで選択されたままです。テキスト端末上の各フレームはバッファー名の前に表示される番号をもちます(Mode Line Variablesを参照)。
この関数はframeを選択して、(他のフレームのせいで不明瞭な場合には)それを前面に移動(raise)してXサーバーのフォーカス授与を試みる。テキスト端末上では、次回再表示時に端末スクリーン全体に新たにフレームが表示される。オプション引数norecordはselect-frame
(下記参照)のときと同じ意味をもつ。この関数のリターン値に意味はない。
以下で説明する関数は理想的には他のフレームを前面にレイズすることなくフレームにフォーカスするべきです。残念ながらウィンドウシステムやウィンドウマネージャーの多くはこの要求を拒絶するかもしれません。
この関数はframeのレイズを要さずにframeにXサーバーのフォーカスを与える。frameがnil
なら選択されたフレームを意味する。Xの配下ではオプション引数noactivateが非nil
なら、frameのウィンドウシステムのウィンドウが“アクティブ”なウィンドウになることを防ぐことを意味する。これはframeが他のフレームの前面にならないようさらに強く主張する。
MS-Windowsではnoactivate引数に効果はない。しかしframeが子フレーム(Child Framesを参照)なら、この関数は通常は他の子レームの前面にレイズすることなくframeにフォーカスする。
この関数はウィンドウシステムのサポートがなければ何もしない。
この関数はフレームframeを選択して、Xサーバーのフォーカスがあればそれを一時的に無視する。frameにたいする選択は次回ユーザーが別フレームに何かを行うか、この関数の次回呼び出しまで継続する(ウィンドウシステムを使用する場合には以前に選択されていたフレームに依然としてウィンドウシステムの入力フォーカスがあるかもしれないので、コマンドループからリターン後にそのフレームが選択されたフレームとしてリストアされるかもしれない)。
指定されたframeは選択されたフレームとなり、その端末が選択された端末になる。この関数はその後にframe内で選択されていたウィンドウを第1引数、norecordを第2引数にしてselect-window
をサブルーチンとして呼び出す(したがってnorecordが非nil
なら、もっとも最近に選択されたウィンドウとバッファーリストの変更を避ける)。Selecting Windowsを参照のこと。
この関数はframe、frameが削除されていればnil
をリターンする。
一般的には実行後に端末を戻すよう切り替えることなく、別の端末に切り替えるのが可能な手段としてselect-frame
を決して使用しないこと。
Emacsはサーバーやウィンドウマネージャーのリクエストとしてフレーム選択をアレンジすることによりウィンドウシステムと協調します。これは適切なときにフォーカス(focus)と呼ばれる特殊な入力イベントを生成することにより行われます。コマンドループはhandle-switch-frame
を呼び出してフォーカスイベントを処理します。Focus Eventsを参照してください。
この関数はフレームframe選択によりフォーカスイベントを処理する。
フォーカスイベントは、通常はこのコマンドを呼び出すことによりその処理を行う。他の理由でこれを呼び出しではならない。
この関数はframeからfocus-frameにフォーカスをリダイレクトする。これはframeにかわってfocus-frameが以降のキーストロークとイベントを受け取るであろうことを意味する。そのようなイベント後にはlast-event-frame
の値はfocus-frameになるだろう。またframeを指定したswitch-frameイベントも、かわりにfocus-frameを選択するだろう。
focus-frameが省略またはnil
なら、frameにたいするすべての既存のリダイレクションがキャンセルされるので、frameが自身のイベントを再度受け取ることになる。
フォーカスリダイレクトの用途の1つは、ミニバッファーをもたないフレームにたいしてである。これらのフレームは別フレーム上のミニバッファーを使用する。別フレーム上のミニバッファーをアクティブにすることは、そのフレームにフォーカスをリダイレクトすることである。これはたとえマウスがミニバッファーをアクティブにしたフレーム内に留まっていても、ミニバッファーが属すフレームにフォーカスを置く。
フレーム選択はフォーカスリダイレクションの変更も可能にする。foo
が選択されているときにフレームbar
を選択することにより、foo
を指すすべてのリダイレクションはかわりにbar
を指す。これはユーザーがselect-window
を使用してあるフレームから別のフレームに切り替えた際に、フォーカスのリダイレクトが正しく機能することを可能にする。
これはフォーカスが自身にリダイレクトされたフレームが、フォーカスがリダイレクトされていないフレームとは異なる扱いを受けることを意味する。前者にたいしてselect-frame
は影響するが、後者には影響がない。
このリダイレクションは、それを変更するためにredirect-frame-focus
が呼び出されるまで継続する。
これはEmacsフレームが入力フォーカスを得た際に実行されるノーマルフック。フックの実行時にはフォーカスを得たフレームが選択される。
これはEmacsフレームが入力フォーカスを失い、かわりに入力フォーカスを得たEmacsフレームが存在しない際に実行されるノーマルフック。
このオプションはフレーム内にマウスポインターを移動した際にウィンドウマネージャーがフォーカスを転送するかどうかと、その方法についてEmacsに知らせる。意味がある値は以下の3つ:
nil
デフォルト値nil
はウィンドウマネージャーが“click-to-focus(フレームがフォーカスを取得するためにフレーム内部でマウスをクリックする必要がある)”のポリシーにしたがう際に使用すること。
t
値t
はマウスポインターの位置にしたがってウィンドウマネージャーが自動的にフォーカスするが、フォーカスを得たフレームは自動的にレイズされず別のウィンドウシステムのウィンドウに隠されたままかもしれないときに使用すること。
auto-raise
値auto-raise
はマウスポインターの位置にしたがってウィンドウマネージャーが自動的にフォーカスして、フォーカスを得たフレームは自動的にレイズされる際に使用すること。
このオプションが非nil
なら、Emacsはselect-frame-set-input-focus
が選択したフレームにマウスポインターを移動する。この関数はother-frame
やpop-to-buffer
などいくつかのコマンドで使用される。
ウィンドウマネージャーは“通常”のフレームのレイズには通常は配慮するので、値t
とauto-raise
を区別する必要はない。これはmouse-autoselect-window
(Mouse Window Auto-selectionを参照)を通じて子フレームをレイズするために有用。
このオオプションは“sloppy”なフォーカス(別のウィンドウマネージャーウィンドウにマウスポインターが移動しないかぎり以前にフォーカスのあったフレームがフォーカスを保持する)と“strict”なフォーカス(マウスポインターが去るとフレームは即座にフォーカスを失う)を区別しないことに注意。ウィンドウマネージャーがフォーカスや自動レイズの遅延をサポートしていなくても、新たなフレームがフォーカスを取得(あるいは自動レイズ)するまでの時間を明示的に指定できる。
変数mouse-autoselect-window
(Mouse Window Auto-selectionを参照)をカスタマイズすることにより、個別のEmacsウィンドウにたいして“focus follows
mouse”ポリシーを提供できる。