Por uma página da wikipedia , o código de escape ANSI ESC[1;31m
define a cor do primeiro plano do terminal como vermelho, que funciona conforme o esperado
Existem 2 parâmetros nesse código de escape ANSI 1
e 31
. Eu sei que um deles, 31
, corresponde à cor de primeiro plano na tabela mostrada abaixo. O que 1
significa lá?
Isso está documentado em outra tabela dois parágrafos acima .
A regra geral é que
ESC [ ... m
consiste em uma lista de códigos de formatação SGR individuais. O primeiro parâmetro não tem nenhum significado especial –1
é simplesmente o código de formatação para texto "negrito" ou "brilhante". (Cabe ao terminal deixar o texto em negrito, claro, ou ambos.)Como um exemplo mais complexo,
ESC[;1;3;31;47m
primeiro redefiniria a formatação (0), depois faria o texto em negrito (1) e itálico (3), depois definiria o primeiro plano para vermelho (31) e o fundo para branco (47).Exceções à regra geral:
Observe que os formatos de código de 256 cores e cores verdadeiras aceitos "de fato" violam essa sintaxe. Por exemplo, a maneira correta de especificar a cor #42 é
ESC[38:5:42m
(com "38:5:42" sendo um único código de formatação), mas geralmente é escrito comoESC[38;5;42m
(como se fossem 3 códigos separados), e os terminais geralmente têm tratamento especial para re-combinar os 3 parâmetros.Da mesma forma, códigos de 24 bits ou true-color são escritos oficialmente como
ESC[38:2::R:G:Bm
(código único com muitos subcampos), mas muitas vezes você veráESC[38;2;R;G;Bm
em vez disso. Isso novamente tem tratamento especial nos terminais, pois os 5 "códigos" separados são recombinados em um único código de formatação truecolor.Gostaria de alterar a excelente resposta do user1686 com uma nota lateral.
Tradicionalmente, os terminais suportam apenas 16 cores (8 cores básicas e suas contrapartes mais brilhantes). Mais tarde, o suporte a 256 cores surgiu e se espalhou, hoje em dia quase todos os emuladores de terminal os suportam. Nos últimos dois anos, a extensão truecolor (16 milhões de cores) também se tornou bastante difundida. No entanto,
ESC[1m
ainda afetou apenas o brilho das primeiras 8 cores da paleta, e apenas a cor do primeiro plano. (Definitivamente não faria sentido alterar os valores truecolor RGB diretos.)Enquanto isso, embora existam códigos independentes e inequívocos para outros tipos de letra ou decorações (como 3 para itálico, 4 para sublinhado etc.), não há como habilitar o tipo de letra em negrito sem efeitos colaterais.
A fim de limpar esse legado e poder avançar de forma limpa, vários emuladores de terminal decidiram deliberadamente deixar
ESC[1m
mudar apenas para negrito, sem alterar a cor. Alguns fizeram disso suas configurações padrão enquanto permitem que você volte para o comportamento legado, alguns suportam apenas esse comportamento em negrito.Espero que mais e mais emuladores de terminal sigam esse caminho no futuro.