OSC 19 Highlight Foreground Color
Set and query the color of selected text.
OSC 19 ; Pt ST
OSC 19 ; Pt ST sets the color of selected text, and OSC 19 ; ? ST asks what it is. OSC 119 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 is ignored, since there is no color after it.
xterm uses the two highlight colors for a selection only in its highlight color mode, highlightColorMode. That mode is off unless both colors have been set to something other than the text’s own colors (charproc.c), so by default a selection is shown in reverse video and these colors are not used, though they are still kept and reported.
A default xterm starts it as the highlightTextColor resource, which is the background (charproc.c), so in the terminal the cases run in, set up as a default xterm, it is reported as rgb:ffff/ffff/ffff.
libghostty-vt has no such color, and ignores OSC 19 and OSC 119, so the cases that ask are known differences.
Support
| Terminal | Version | Support | Notes |
|---|---|---|---|
| VT220 | manual, 2nd ed., 1984 | No | OSC is not among the controls it recognizes (§4.2) |
| VT510 | manual, 1st ed., 1993 | No | ignores an OSC string (chapter 4) |
| xterm | patch 412, xterm-411a | Yes | |
| libghostty-vt | 0f171f6 | No | ignored |
| Konsole | 26.11.70, a24c3d71 | No | not in its source |
| kitty | 0.49.1, run in a VM | Yes | passes the case that shows it working; ends its replies with ST where xterm uses BEL |
| foot | 1.28.0, run in a VM | Yes | passes the case that shows it working |
| pyte | 0.8.2, run as a library | No | fails the case that shows it working |
| xterm.js headless | 6.0.0, run as a library | No | fails the case that shows it working |
| alacritty_terminal | 0.26.0, run as a library | No | fails the case that shows it working |
| ConEmu | build 230724, its documentation | No | not in its ANSI escape codes |
| rxvt-unicode | 9.31, run in a VM | Yes | passes the case that shows it working; writes colors as ff00 where xterm writes ffff |
| VTE | 0.84.1, run as a library | Yes | passes the case that shows it working |
Validation
OSC19-1: Ask for it
\e]19;?\a
|____|
reply \e]19;rgb:ffff/ffff/ffff\a
OSC19-2: Change it
\e]19;#0080ff\a
\e]19;?\a
|____|
reply \e]19;rgb:0000/8080/ffff\a