SGR: Select Graphic Rendition¶
Status: Standard (ECMA-48) for the core attributes; xterm, Extension, and Convention for colors beyond 8, underline styles, and underline color.
CSI Pm m
SGR sets the attributes applied to characters printed afterwards. Parameters
accumulate: CSI 1 ; 31 m is bold and red. CSI m and CSI 0 m reset every
attribute, including colors.
Attributes¶
Ps |
Effect | Reset by | Notes |
|---|---|---|---|
0 |
Reset all | Also resets foreground, background, underline color | |
1 |
Bold | 22 |
Historically "bright"; see bold-as-bright |
2 |
Faint | 22 |
Rendered as dimmer color or lighter weight |
3 |
Italic | 23 |
ECMA-48 says "italicized"; some terminals render inverse instead |
4 |
Underline | 24 |
4:n selects a style; see below |
5 |
Slow blink | 25 |
Often disabled by configuration |
6 |
Rapid blink | 25 |
Almost universally treated as 5 |
7 |
Inverse | 27 |
Swaps foreground and background at render time |
8 |
Conceal | 28 |
Rendered as spaces; text remains in the grid and can be copied |
9 |
Strikethrough | 29 |
|
21 |
Double underline | 24 |
ECMA-48; xterm used to treat as "bold off", now follows ECMA |
53 |
Overline | 55 |
|
58 |
Underline color | 59 |
Extension (kitty); same syntax as 38 |
Parameters 10–20 (font selection), 26 (proportional), 51–52 (framed, encircled), and 60–65 (ideogram attributes) are defined by ECMA-48 and implemented almost nowhere; mintty is the notable exception.
Underline styles¶
Status: Extension, originated by kitty.
CSI 4 : 0 m no underline
CSI 4 : 1 m straight
CSI 4 : 2 m double
CSI 4 : 3 m curly
CSI 4 : 4 m dotted
CSI 4 : 5 m dashed
CSI 4 m equals 4:1 and CSI 24 m clears all styles. Terminfo announces
support with Smulx (styled underline) and Setulc (underline color); tmux
relays them when its outer terminal has them.
Terminals that do not understand sub-parameters typically apply plain
underline for 4:3 (they stop at the colon) or ignore the whole SGR. Neither
outcome is harmful, which is why applications ship curly underlines without
detection.
Colors¶
Ps |
Effect |
|---|---|
30–37 |
Foreground from the 8-color palette |
40–47 |
Background from the 8-color palette |
90–97 |
Foreground from the bright 8 (aixterm; universal) |
100–107 |
Background from the bright 8 |
38 ; 5 ; n |
Foreground from the 256-color palette |
48 ; 5 ; n |
Background from the 256-color palette |
38 ; 2 ; r ; g ; b |
Foreground truecolor |
48 ; 2 ; r ; g ; b |
Background truecolor |
39 / 49 |
Default foreground / background |
58 ; 2 ; r ; g ; b, 58 ; 5 ; n |
Underline color; 59 resets |
The 256-color palette is 16 named colors, a 6×6×6 cube at 16–231 with levels
0, 95, 135, 175, 215, 255, and a 24-step gray ramp at 232–255. Entries are
redefinable with OSC 4; applications must not assume
index 1 is red.
Color parameter forms¶
ISO 8613-6 defines the colon form with a color-space identifier:
CSI 38 : 2 : id : r : g : b m id is usually empty
CSI 38 : 5 : n m
xterm adopted the semicolon form 38;2;r;g;b before sub-parameters were
common, and it became the de facto interchange form. Both are now widely
accepted; the differences:
38;2;r;g;bis parsed by everything that supports truecolor, including terminals that reject colons;38:2::r:g:bsurvives being combined with other parameters in one sequence when the receiver does not implement it, because the receiver can skip one parameter;- some terminals accept
38:2:r:g:b(no id) as well; xterm documents both.
Terminfo reports truecolor as RGB (ncurses 6.1+) or the older tmux-style
Tc user capability; COLORTERM=truecolor is the shell-level convention.
See Environment.
Bold and bright¶
Classic terminals rendered SGR 1 by switching to the bright palette entry.
Modern emulators render a bold weight and, by configuration, may also
brighten the color. Applications wanting bright colors should use 90–97
explicitly and treat 1 as weight only. xterm's boldColors resource,
kitty's bold_is_bright, and VTE's bold-is-bright control this.
Faint¶
There is no bright counterpart. Emulators blend toward the background or use a lighter font weight; the result differs enough that faint text should never carry information that regular text does not.
Push and pop¶
Status: xterm.
CSI # { XTPUSHSGR: push current attributes
CSI # } XTPOPSGR: pop
CSI Ps ; … # { push only the listed attribute classes
Implemented by xterm (opt-in build), Contour, and mintty; elsewhere ?.
Applications cannot rely on it and should track attributes themselves.
"pass" means tmux relays the attribute to the outer terminal when that terminal's terminfo advertises it.
Probe¶
tools/sgr-sampler
tools/query tcap RGB # hex reply carries the terminfo value
tools/query tcap Smulx
tools/query decrqss m # DECRQSS: current SGR, e.g. ^[P1$r0;1;31m^[\
Sources¶
- ECMA-48 §8.3.117
- ISO/IEC 8613-6 (ITU T.416) §13.1.8
- XTerm Control Sequences, SGR
- kitty underline styles
- Gist: True Colour support in terminals
- mintty control sequences
Compatibility¶
Choose terminals
| Feature / stable ID | Alacritty | Apple Terminal | ConPTY (conhost) | Contour | DomTerm | foot | Ghostty | iTerm2 | kitty | Konsole | mintty | mlterm | PuTTY | Revenant | RLogin | st | tmux | rxvt-unicode | VTE | wayst | WezTerm | Windows Terminal | xterm | xterm.js |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
256 colorssgr-256-colors |
SupportedImported · unverified | SupportedImported · unverified | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | Unknown | SupportedImported · unverified | Unknown | Unknown | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified |
Truecolor 38;2sgr-38-2-truecolor |
SupportedImported · unverified | Unknown | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | Unknown | SupportedImported · unverified | Unknown | Unknown | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified |
Colon form 38:2sgr-38-2-colon-form |
SupportedImported · unverified | Unknown | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | Unknown | Unknown | Unknown | Unknown | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified |
Italic 3sgr-3-italic |
SupportedImported · unverified | SupportedImported · unverified | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | Unknown | Unknown | Unknown | Unknown | Unknown | PartialImported · unverified | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified |
Strikethrough 9sgr-9-strikethrough |
SupportedImported · unverified | Unknown | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | Unknown | Unknown | Unknown | Unknown | Unknown | PartialImported · unverified | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified |
Underline styles 4:nsgr-4-underline-styles |
SupportedImported · unverified | Unknown | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | Unknown | Unknown | Unknown | Unknown | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified |
Underline color 58sgr-58-underline-color |
SupportedImported · unverified | Unknown | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | Unknown | Unknown | Supported | Unknown | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | Unsupported | SupportedImported · unverified |
Overline 53sgr-53-overline |
Unknown | Unknown | Unknown | SupportedImported · unverified | Unknown | Unknown | SupportedImported · unverified | Unknown | Unknown | Unknown | SupportedImported · unverified | Unknown | Unknown | Unknown | Unknown | Unknown | PartialImported · unverified | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified |
Blink 5sgr-5-blink |
Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | Unknown | SupportedImported · unverified | Unknown | Unknown | Unknown | PartialImported · unverified | Unknown | SupportedImported · unverified | Unknown | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified | SupportedImported · unverified |
XTPUSHSGRcsi-xtpushsgr |
Unknown | Unknown | Unknown | SupportedImported · unverified | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | SupportedImported · unverified | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | SupportedImported · unverified | Unknown |
SGR select graphic renditioncsi-sgr |
Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
XTPOPSGR pop graphic renditioncsi-xtpopsgr |
Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
SGR 0: Reset allsgr-0-reset-all |
Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
SGR 1: Boldsgr-1-bold |
Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
SGR 2: Faintsgr-2-faint |
Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
SGR 6: Rapid blinksgr-6-rapid-blink |
Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
SGR 7: Inversesgr-7-inverse |
Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
SGR 8: Concealsgr-8-conceal |
Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
SGR 21: Double underlinesgr-21-double-underline |
Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
Reset underline colorsgr-59-underline-color-reset |
Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |