Em geral, obter as cores atuais é impossível. O processamento da sequência de controle de um terminal acontece "dentro" do terminal, onde quer que esteja. Com um terminal emulador como xterm
ou o construído em um kernel do sistema operacional que fornece os terminais virtuais do kernel, o estado interno do emulador, incluindo sua noção de "renderização gráfica" atual ( isto é, cor e atributos), está na própria máquina e é teoricamente acessível. Mas para um terminal real esta informação está em algum local de RAM em uma máquina fisicamente separada conectada através de um link serial.
Dito isto, alguns terminais incluem um mecanismo para ler essas informações como parte de seu protocolo terminal, que é enviado através desse link serial. Eles fornecem seqüências de controle que um programa pode enviar para o terminal, fazendo com que ele envie de volta informações sobre seu estado interno, como entrada de terminal. mikeserv
mostrou as sequências de controle que o emulador de terminal xterm
responde. Mas estes são específicos para xterm
. Os emuladores de terminal embutidos no kernel do Linux e os vários kernels BSD são tipos de terminal diferentes, por exemplo, e não implementam nenhuma sequência de controle. O mesmo vale para famílias inteiras de terminais reais.
Os terminais DEC VT525 implementam um mecanismo de leitura, mas possuem um conjunto de seqüências de controle que não tem relação com aquelas usadas por xterm
. Um envia a sequência DECRQSS (Solicitar Seleção ou Configuração) para solicitar a execução gráfica atual, e o terminal responde enviando o DECRPSS (Report Selection or Setting). Especificamente:
- O host envia: DCS
$
q
m
ST (DECRQSS com a parte da função de controle de SGR como a configuração) - O terminal responde: DCS
0
$
r
0
;
3
3
;
4
4
m
ST (DECRPSS com os parâmetros e parte da função de controle de uma sequência de controle SGR que define as cores atuais de primeiro plano e plano de fundo)
Claro, uma leitura cuidadosa da sua pergunta revela que você está acenando uma banana coberta de chocolate nesses sistemas monetários europeus novamente. O que você está realmente tentando fazer, para o qual você selecionou uma solução e, em seguida, perguntou como fazer parte dessa solução, é preservar o estado anterior enquanto você escreve alguma saída colorida. Não apenas há uma sequência de controle DEC VT para fazer isso, mas também uma sequência terminal do console SCO para ela, que é reconhecida por xterm
e vários emuladores de terminal integrados do kernel, e uma entrada termcap / terminfo que informa para que são seu terminal.
As entradas termcap são sc
e rc
. As entradas terminfo são save_cursor
e restore_cursor
. Os nomes são um tanto enganadores quanto ao efeito (embora eles atuem como um aviso de que você está confiando em algo que é de fato ao invés de de jure ). As seqüências de controle DECSC, DECRC, SCOSC e SCORC atuais salvam e restauram a renderização gráfica atual também.
Dado que o artigo que você apontou é sobre como gerar sequências de controle a partir de scripts de shell, o comando que você está agora procurando é tput
.
Leitura adicional
- Jonathan de Boyne Pollard. 2007. Coloque a banana coberta de chocolate e afaste-se da moeda europeia sistemas. . Respostas frequentemente dadas.
- Manual de referência do programador VT420 . EK-VT420-RM-002. Fevereiro de 1992. Digital.
- Informações sobre o programador de terminal de vídeo VT520 / VT525 . EK-VT520-RM. Julho de 1994. Digital.