^[control-codes live in libghostty-vt

Private modes

DECCKM Cursor Keys Mode

Choose what the arrow keys send: cursor movement or application codes.

CSI ? 1 h
DEC STD 070
§6.8 Set/Reset Cursor Key Mode, p. 6-62
VT510
DECCKM—Cursor Keys Mode

CSI ? 1 h sets cursor keys mode to application and CSI ? 1 l resets it to cursor, the default. It changes what the four arrow keys send to the host. Reset, they send ANSI cursor movement sequences, ESC [ A for up. Set, they send application codes introduced by SS3 instead, ESC O A for up, similar to what the numeric keypad sends in application mode. DEC STD 070 tabulates both sets of codes in §6.8.2, p. 6-61.

DEC STD 070 requires, from level 2, that this mode and the keypad mode (DECKPAM) be independent of each other.

This site cannot press keys, so the cases check only the mode, through DECRQM, and that nothing on the screen changes.

Validation

DECCKM-1: Set

\e[?1h
AB
\e[?1$p   # DECRQM: is mode 1 set?
|AB___|
reply \e[?1;1$y

DECCKM-2: Reset

\e[?1h
\e[?1l
\e[?1$p
|_____|
reply \e[?1;2$y

DECCKM-3: Cursor mode to begin with

\e[?1$p
|_____|
reply \e[?1;2$y
Every example on these pages runs in your browser, in libghostty-vt compiled to WebAssembly.