?1004 Focus Events
Have the terminal tell the program when its window gains or loses the keyboard focus.
CSI ? 1004 h
- xterm
- Mouse Tracking
With CSI ? 1004 h set, the terminal sends CSI I to the program when its window gains the keyboard focus and CSI O when it loses it, so that an editor can, for instance, reload a file that changed while it was in the background. CSI ? 1004 l stops the reports. It is xterm’s, listed with the mouse tracking modes, but it can be set with or without any of them (dpmodes, SendFocusButton). It is off to begin with, and RIS turns it off.
Focus changes come from the window, not from the data a case writes, so the cases check what DECRQM says and that setting the mode sends nothing on its own. libghostty-vt passes them.
Validation
FOCUS-1: Off to begin with
\e[?1004$p
|____|
reply \e[?1004;2$y
FOCUS-2: Setting it sends nothing
A
\e[?1004h
B
|AB__|
cursor 1,3
reply none
FOCUS-3: Set and reset
\e[?1004h
\e[?1004$p
\e[?1004l
\e[?1004$p
|____|
reply \e[?1004;1$y\e[?1004;2$y
FOCUS-4: RIS turns it off
\e[?1004h
\ec
\e[?1004$p
|____|
reply \e[?1004;2$y