本节同时讨论窗口系统和 Emacs 框架。 当仅提及 “框架(frame)” 或 “窗口(windows)” 时,指的是 Emacs 框架和 Emacs 窗口。 当提及窗口系统窗口(同时也是 Emacs 框架)时,本节始终使用 “窗口系统窗口(windwos system window)”。
窗口系统为用户提供了通用方式,以控制哪个窗口系统窗口(即 Emacs 框架)接收键盘输入。 这种对窗口系统窗口的选择称为 焦点(focus)。 当用户执行操作在 Emacs 框架之间切换时,会产生 焦点事件(focus event)。 当使用 mouse-autoselect-window 在 Emacs 框架内的窗口之间切换时,Emacs 也会产生焦点事件。
在按键序列中间产生焦点事件会打乱序列。 因此 Emacs 从不在按键序列中间产生焦点事件。 如果用户在按键序列中间(即前缀键之后)改变焦点,Emacs 会重新排列事件, 使焦点事件出现在多事件按键序列之前或之后,而不会插入其中。
全局按键映射中,用于切换框架的焦点事件的默认定义是: 按照用户预期,在 Emacs 内选中该新框架。 See Input Focus,该节点也描述了与框架焦点事件相关的钩子。 框架的焦点事件在 Lisp 中以如下列表表示:
(switch-frame new-frame)
其中 new-frame 是切换到的框架。
某些 X 窗口管理器设置为:只需将鼠标移入框架即可设置焦点。 通常,Lisp 程序无需知晓这种焦点变化,直到其他类型的输入到达。 仅当用户在新框架中实际敲击键盘按键或按下鼠标按键时,Emacs 才产生焦点事件; 仅仅在框架之间移动鼠标不会产生焦点事件。
当设置了 mouse-autoselect-window 时, 将鼠标移到框架内的新窗口上也可以切换选中窗口。 See Mouse Window Auto-selection,该节点描述了不同取值的行为。 当鼠标移到新窗口上时,会产生用于切换窗口的焦点事件。 窗口的焦点事件在 Lisp 中以如下列表表示:
(select-window new-window)
其中 new-window 是切换到的窗口。