Sim. Os terminais ANSI suportam códigos de escape ANSI . Cada código Control Sequence Introducer
( CSI
) no seguinte formato:
ESC[<<<CODE>>>
O caractere Ascii 27
(o ESC
caractere) ou 1b
em hexadecimal, seguido por um colchete esquerdo e depois uma letra indicando a ação a ser usada.
Observe que uma lista de ;
parâmetros separados pode ser fornecida diretamente antes do <<<CODE>>>
parâmetro.
Agora, as cores usam um subconjunto de CSI
códigos, os Select Graphic Rendition
códigos. Estes estão na forma:
ESC[<<<SGR>>>m
O SGR
código é passado como um parâmetro the CSI
. Relevantes para sua pergunta são os SGR
códigos 30-49. Os códigos 30 a 39 definem a cor do primeiro plano. Os códigos 40 a 49 definem a cor de fundo.
30 - Foreground Black
31 - Foreground Red
32 - Foreground Green
33 - Foreground Yellow
34 - Foreground Blue
35 - Foreground Magenta
36 - Foreground Cyan
37 - Foreground White
40 - Background Black
41 - Background Red
42 - Background Green
43 - Background Yellow
44 - Background Blue
45 - Background Magenta
46 - Background Cyan
47 - Background White
Os códigos 38 e 48 são códigos especiais. Estes são os que permitem usar valores RGB. O formato para estes é:
ESC[38;2;<r>;<g>;<b>m (Foreground)
ESC[48;2;<r>;<g>;<b>m (Background)
Nota: usos alternativos incluem \x1b[<3 or 4>8;5;<web safe color index>m
. Com esse uso, há uma codificação de cores completamente diferente. Veja o link na parte superior desta resposta para obter mais informações.
Os códigos 39 e 49 definem as cores de primeiro e segundo plano com seus padrões, que são definidos terminal por terminal.
Na prática, as cores 30-37 40-47 são ligeiramente diferentes do que os rótulos dizem que são.
0 - Black
1 - Darker Red
2 - Darker Green
3 - Dark/Yellow or Brown (varies between terminals)
4 - Dark Blue
5 - Dark Magenta
6 - Dark Cyan
7 - Light Grey
Para obter cores claras, use o SGI para negrito 1
,. Negrito é um nome enganador. Não torna a fonte em negrito. Na verdade, aumenta o brilho do texto. Com negrito aplicado, as cores se tornam:
0 - Dark Grey
1 - Bright Red
2 - Bright Green
3 - Bright Yellow
4 - Bright Blue
5 - Bright Magenta
6 - Bright Cyan
7 - White
Nota: os últimos dois blocos de números de cores são relevantes tanto para frente quanto para fundo ( <index> + (30 or 40)
).
Para remover todos os estilos (de volta ao modo padrão / normal), use SGR
0.
CSI
códigos não são todos gráficos. Por exemplo, ESC[2J
limpará seu terminal. ESC[<y>;<x>H
define a posição do cursor (indexado em 1). Veja o artigo da Wikipedia para mais informações.
Nota: para testá-los, use echo -e
ou printf
.