本節では、ウィンドウシステムとEmacsフレームの両方について説明します。単に「フレーム」や「ウィンドウ」と述べる場合は、EmacsフレームおよびEmacsウィンドウを指します。Emacsフレームでもあるウィンドウシステムのウィンドウについて述べる場合は、本節では常に「ウィンドウシステムのウィンドウ」と表記します。
ウィンドウシステムは、どのウィンドウシステムウィンドウ(またはEmacsフレーム)がキーボード入力を受け取るかをユーザーが制御するための一般的な仕組みを提供しています。このように選択されたウィンドウシステムウィンドウのことをフォーカスと呼びます。ユーザーがEmacsフレーム間を切り替える操作を行うと、フォーカスイベントが発生します。また、Emacsフレーム内でEmacsウィンドウを切り替えるためにmouse-autoselect-windowを使用した場合にも、Emacsはフォーカスイベントを発生させます。
キーシーケンスの途中でフォーカスイベントが発生すると、そのシーケンスが乱れてしまいます。そのため、Emacsはキーシーケンスの途中でフォーカスイベントを生成することはありません。ユーザーがキーシーケンスの途中――つまりプレフィックスキーを押した後に――フォーカスを変更した場合、Emacsはイベントの順序を並べ替え、フォーカスイベントがマルチイベントのキーシーケンスの前後に来るようにし、シーケンスの途中に配置しないようにします。
グローバルキーマップにおいて、フレームを切り替えるフォーカスイベントの一般的な定義は、ユーザーが期待する通り、Emacs内でその新しいフレームを選択することです。フレームのフォーカスイベントに関連するフックについても説明している Input Focus を参照してください。フレームのフォーカスイベントは、Lispでは次のようなリストとして表現されます:
(switch-frame new-frame)
ここで new-frame は切り替わったフレームである。
一部のXウィンドウマネージャは、マウスをフレーム内に移動させるだけでそこにフォーカスが設定されるように構成されています。通常、他の種類の入力が入るまで、Lispプログラムがフォーカスの変化を検知する必要はありません。Emacsは、ユーザーが実際に新しいフレームでキーボードキーを入力したか、あるいはマウスボタンを押した時にのみフォーカスイベントを生成します。単にマウスをフレーム間で移動させただけでは、フォーカスイベントは生成されません。
mouse-autoselect-window が設定されている場合、フレーム内の新しいウィンドウにマウスを移動させることで、選択中のウィンドウを切り替えることもできます。値ごとの動作については、マウスによるウィンドウの自動選択を参照してください。マウスを新しいウィンドウに移動させると、ウィンドウを切り替えるためのフォーカスイベントが発生します。ウィンドウのフォーカスイベントは、Lispでは次のようなリストで表現されます。
(select-window new-window)
ここで new-window は切り替え先のウィンドウです。