Onde a seqüência de escape do caractere '\ 033 [\ 061m' documentada significa em negrito?

6

Eu estou tentando escrever um programa que executa um programa de console como o gcc e exibe sua saída em cores. Eu usei openpty em vez de pipe para fingir ser um dispositivo de caractere e agora obtenha códigos de escape ANSI que contêm informações sobre cores. Eu tentei alguns programas e eles às vezes me dão o código CSI [ 49 m . Tanto a wikipedia como o documentação do código de escape do xterm (procure por Ps = 4 9 ) concorda que o código CSI [ 49 m significa que eu deveria estar usando a cor de fundo padrão.

No entanto, o xterm e o zsh do debian, bem como o console linux do ubuntu, discordam. printf '3[1mTest\n3[0m' executado em um console como xterm deve estar imprimindo "Test" com a cor de fundo padrão ( 3 is escape e escape + [ faça um CSI (Control Sequence Introducer) e 1 é octal que é 49 decimal ), mas ele realmente imprime " Teste "em negrito (e o 1 no final parece significar" não mais em negrito ", mas não está documentado nem na wikipedia nem na documentação do código de cores xterm). Todos os consoles mencionados acima concordam com isso.

Existe uma lista de códigos de cores para vários consoles e padrões , mas nenhum deles lista CSI 49 m para significar "negrito".

De onde vem essa inconsistência? Onde posso encontrar uma lista de códigos de cores que correspondem ao que qualquer um dos console xterm, zsh ou linux está usando?

    
por nwp 04.11.2017 / 12:38

1 resposta

12

é o código octal do caractere 1 em ASCII, portanto, \e[m ou [m ou 35 ou [1m é <ESC>[1m .

Isso é CSI 1 m . Veja Wikipedia ou a documentação xterm .

$ printf '\e[m' | od -An -vto1 -tc
 033 133 061 155
 033   [   1   m
$ tput bold | od -An -vto1 -tc
 033 133 061 155
 033   [   1   m

Para a cor de fundo padrão , você precisaria de \e[49m , não \e[m . Aqueles 1 e 49 números devem ser expressos em sua representação de string decimal, não sendo o valor de byte.

    
por 04.11.2017 / 12:44