このセクションではウィンドウシステムとEmacsフレームについて説明します。単に“フレーム(frames)”や“ウィンドウ(windows)”と述べた場合にはEmacsフレームとEmacsウィンドウのことを指しています。ウィンドウシステムのウィンドウ、これはEmacsフレームのことでもありますが、このセクションでは常に“ウィンドウシステムのウィンドウ(window system window)”と呼ぶことにします。
ウィンドウシステムはユーザーにたいしてどのウィンドウシステムのウィンドウがキーボード入力を受け取るか制御するための一般的な方法を提供します。このウィンドウシステムのウィンドウ選択はフォーカス(focus)と呼ばれます。Emacsのフレームを切り替えるためにユーザーが何かを行うと、それはフォーカスイベント(focus event)を生成します。mouse-autoselect-windowを用いてEmacsフレーム内でEmacsウィンドウ間を切り替える際に、Emacsはフォーカスイベントも生成します。
キーシーケンスの途中におけるフォーカスイベントは、そのシーケンスを誤ったものにするかもしれません。そのためEmacsは決してキーシーケンスの途中でフォーカスイベントを生成しません。ユーザーがキーシーケンスの途中(つまりプレフィクス引数の後)でフォーカスを変更すると、複数イベントキーシーケンスの前か後にフォーカスイベントが到着するように、Emacsはフォーカスイベントを記録しておきます。
グローバルキーマップにおいてフレームを切り替えるフォーカスイベントの通常の定義は、ユーザーの期待に沿うようにEmacs内で新たなフレームを選択します。入力のフォーカスではフレーム向けのフォーカスイベントに関連するフックについても説明しています。Lispではフレームにたいするフォーカスイベントは以下のようなリストとして表現されます:
(switch-frame new-frame)
ここでnew-frameは切り替え先のフレームです。
Xウィンドウマネージャーには、あるフレームにマウスを移動するだけで、そこにフォーカスされるようにセットアップするものがいくつかあります。通常は他の種類の入力が到着するまで、Lispプログラムがフォーカスの変更を知る必要はありません。Emacsはユーザーが新たなフレーム内で実際にキーボードのキーをタイプするかマウスボタンを押下したときしか、フォーカスイベントを生成しません。つまりフレーム間でマウスを移動させても、フォーカスイベントは生成されません。
mouse-autoselect-windowをセットするとフレーム内の新たなウィンドウ上にマウスを移動することで選択されたウィンドウの切り替えもできるようになります。別の値についてはマウスによるウィンドウの自動選択を参照してください。マウスが新たなウィンドウ上に移動すると、ウィンドウを切り替えるフォーカスイベントが生成されます。Lispではウィンドウ向けのフォーカスイベントは以下のようなリストとして表されます:
(select-window new-window)
ここでnew-windowは切り替え先のウィンドウです。