^[control-codes live in libghostty-vt

Operating system commands

OSC 10 Text Foreground Color

Set, query and reset the default foreground color.

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

OSC 10 ; Pt ST sets the default foreground, the color of text that has no SGR color of its own, and OSC 10 ; ? ST asks what it is. OSC 110 puts it back as it started.

It is the first of xterm’s ten dynamic colors, each with its own OSC number, apart from the 256 colors of the palette:

PsColorReset
10the default foreground, used by text with no SGR color110
11the default background, behind text with no SGR background color111
12the text cursor112
13the mouse pointer, while it is over the window113
14the mouse pointer’s outline, the part of an X cursor drawn in its second color114
15what is drawn in xterm’s Tektronix 4014 window115
16the background of xterm’s Tektronix 4014 window116
17the background of selected text117
18the cursor in xterm’s Tektronix 4014 window118
19selected text119

They all work alike:

  • OSC Ps ; Pt ST sets color Ps to Pt, in any form X11’s XParseColor accepts: a name such as red, #rrggbb, or rgb:rr/gg/bb.
  • Pt of ? asks for it. The answer is OSC Ps ; rgb:rrrr/gggg/bbbb, sixteen bits a part, ended with whichever of ST or BEL ended the question.
  • A sequence can carry more than one color. Each further ; moves on to the next number, so OSC 10 ; red ; blue ST sets the foreground and the background, and OSC 10 ; ? ; ? ST asks for both. An empty one is skipped, so OSC 10 ; ; blue ST sets only the background (ChangeColorsRequest, ReportColorRequest).
  • OSC 1Ps ST, that is OSC 110 ST to OSC 119 ST, puts color Ps back as it started (ResetColorsRequest).
  • Neither DECSTR nor RIS resets them, unlike the palette.

A program asks for the background, OSC 11 ; ? ST, to find out whether it is running on a light or a dark terminal and choose its own colors to suit.

Where these colors start is the host’s choice. The cases are run in a terminal given a default xterm’s: black text on white, with the cursor and the mouse pointer in the foreground color (charproc.c). That is what the answers below report; it is not how this site draws the screens.

libghostty-vt has 10, 11 and 12, and 110 to 112. It ignores the rest, so a chain of questions that runs past 12 stops there. It also passes over an empty color without moving on to the next number, so OSC 10 ; ; blue ST sets its foreground. That case is a known difference.

Validation

OSC10-1: Ask for the foreground

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

OSC10-2: Change it

\e]10;#ff8000\a
\e]10;?\a
|____|
reply \e]10;rgb:ffff/8080/0000\a

OSC10-3: Each ; moves to the next color

\e]10;red;blue\a
\e]10;?;?\a
|____|
reply \e]10;rgb:ffff/0000/0000\a\e]11;rgb:0000/0000/ffff\a

OSC10-4: An empty one is skipped

\e]10;;blue\a
\e]10;?;?\a
|____|
reply \e]10;rgb:0000/0000/0000\a\e]11;rgb:0000/0000/ffff\a

OSC10-5: Questions and changes together

\e]10;?;red\a  # ask for 10, set 11
\e]11;?\a
|____|
reply \e]10;rgb:0000/0000/0000\a\e]11;rgb:ffff/0000/0000\a
Every example on these pages runs in your browser, in libghostty-vt compiled to WebAssembly.