OSC P Set Palette (Linux)
Change a palette color, as the Linux console does.
OSC P n rrggbb ST
- ECMA-48
- §8.3.89 OSC – Operating System Command, p. 51
- Specification
- console_codes(4), Linux manual pages
OSC P n rrggbb ST sets color n, one hex digit from 0 to f, to the color rrggbb. It is the Linux console’s, which has only sixteen colors; OSC 4 does the same for the 256 of the palette, and OSC R resets them. iTerm2 also accepts it, though its Proprietary Escape Codes page advises against it, and extends n past f to its other colors: g and h for the default foreground and background, i for bold, j and k for the selection, l and m for the cursor.
The Linux console’s own definition, in console_codes(4), has no terminator: ESC ] P takes exactly seven hex digits after it, and ESC ] R none at all. A terminal that reads them as ordinary OSCs, which run until ST or BEL, swallows whatever follows one sent the console’s way, until something ends the string.
xterm, built for Linux, knows the console’s form, under its brokenLinuxOSC resource, on by default. Once an OSC string begins with P and has seven more characters, or begins with R and has one more, the next character abandons it: xterm rings the bell and handles that character as if no string had begun (charproc.c, illegal_parse). So sent the console’s way, neither swallows anything. Sent as an OSC, ended with ST, each still rings the bell, since the ESC of the ST is the character that abandons it. Either way no color changes. libghostty-vt reads them as ordinary OSCs and ignores them, with no bell, so the cases 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 | Partly | knows its length, under brokenLinuxOSC: after P and seven characters it abandons the string and rings the bell; no color changes |
| libghostty-vt | 0f171f6 | No | ignored |
| Konsole | 26.11.70, a24c3d71 | No | a letter where the number should be is a decoding error |
| iTerm2 | 3.7.3, its documentation | Yes | accepted though discouraged, with g to m for its other colors |
| ConEmu | build 230724, its documentation | No | not in its ANSI escape codes |
| Linux console | man-pages 6.19, console_codes(4) | Yes | exactly seven hex digits and no terminator, console_codes(4) |
Validation
OSC-P-1: It does not change a color, and rings the bell
\e]P1ff0000\e\\
\e]4;1;?\a
|______|
reply \e]4;1;rgb:cdcd/0000/0000\a
bell 1
OSC-P-2: Nor iTerm2’s foreground
\e]Pg4040ff\e\\ # the foreground, iTerm2's way
\e]10;?\a
|______|
reply \e]10;rgb:0000/0000/0000\a
bell 1
OSC-P-3: Without a terminator, the text after it is printed
\e]P1ff0000 # the console's way
AB # the A abandons the string
|AB____|
cursor 1,3
bell 1