^[control-codes
live in libghostty-vt

Operating system commands

OSC 12 Text Cursor Color

View as Markdown

Set and query the color of the text cursor.

OSC 12 ; Pt ST
ECMA-48
§8.3.89 OSC – Operating System Command, p. 51
xterm
Operating System Commands

OSC 12 ; Pt ST sets the color of the text cursor, and OSC 12 ; ? ST asks what it is. OSC 112 puts it back as it started. It is one of xterm’s dynamic colors, and works as OSC 10 explains: Pt is any color X11 can parse, and a further ; in the same sequence moves on to color 13.

A default xterm starts it as the cursorColor resource, which is the foreground (charproc.c), so in the terminal the cases run in, set up as a default xterm, it is reported as rgb:0000/0000/0000.

libghostty-vt has it, and agrees with xterm.

Support

TerminalVersionSupportNotes
VT220manual, 2nd ed., 1984NoOSC is not among the controls it recognizes (§4.2)
VT510manual, 1st ed., 1993Noignores an OSC string (chapter 4)
xtermpatch 412, xterm-411aYes
libghostty-vt0f171f6Yesa chain stops after 12 (OSC12-3)
Konsole26.11.70, a24c3d71Partlysets it, but does not answer ?
kitty0.49.1, run in a VMYespasses the case that shows it working; ends its replies with ST where xterm uses BEL
foot1.28.0, run in a VMYespasses the case that shows it working
pyte0.8.2, run as a libraryNofails the case that shows it working
xterm.js headless6.0.0, run as a libraryNofails the case that shows it working
alacritty_terminal0.26.0, run as a libraryYespasses the case that shows it working
ConEmubuild 230724, its documentationNonot in its ANSI escape codes
rxvt-unicode9.31, run in a VMYespasses the case that shows it working; writes colors as ff00 where xterm writes ffff
VTE0.84.1, run as a libraryYespasses the case that shows it working

Validation

OSC12-1: Ask for it

\e]12;?\a
|____|
reply \e]12;rgb:0000/0000/0000\a

OSC12-2: Change it

\e]12;#0080ff\a
\e]12;?\a
|____|
reply \e]12;rgb:0000/8080/ffff\a

OSC12-3: A chain past the cursor

\e]12;?;?\a  # the cursor, then the pointer
|____|
reply \e]12;rgb:0000/0000/0000\a\e]13;rgb:0000/0000/0000\a
Every example on these pages runs in your browser, in libghostty-vt compiled to WebAssembly.