Echo / Imprimindo texto na cor de um determinado código hexadecimal (independentemente de Xresources / Xdefaults)

2

existe alguma maneira de ecoar / imprimir texto na cor de um determinado código hexadecimal (# 000000, #FFFFFF, etc.), independentemente das próprias definições de cores Xresources / Xdefaults ?

Por exemplo, se Bob tivesse em seu Xresources / Xdefaults :

*color1 : #800000 

E Tom tinha em seu Xresources / Xdefaults :

*color1 : #CC3300

E alguns excêntricos tinham em seu Xresources / Xdefaults :

*color1 : #8080FF

Existe alguma coisa que eles poderiam todos os três tipos que mostraria a todos os três algo assim?

    
por punchylover 05.12.2013 / 20:04

1 resposta

6

Muitos emuladores de terminal permitem redefinir cores com seqüências de escape, e até mesmo um recurso terminfo para isso: initc . Com esses, e supondo que o banco de dados terminfo esteja correto, você pode fazer:

tput initc 1 1000 0 0

Para redefinir a cor 1 (normalmente red ) para 1000 ‰ vermelho, 0 ‰ verde, 0 ‰ azul ( #ff0000 ).

Então:

tput initc 1 1000 0 0
tput setaf 1 # to set the foreground color to 1
echo '██ = #FF0000'
tput sgr0

faria o que você quer.

Para ver qual sequência de escape corresponde:

$ tput initc 1 1000 0 0 | cat -vt
^[]4;1;rgb:FF/00/00^[\

Então, no meu terminal ( xterm ), eu também posso fazer:

printf '\e]4;1;rgb:FF/00/00\e\\e[31m██ = #FF0000\e[m\n'

Observe que ela muda a cor de color1 . Então, se você mudar para azul, todo o texto que foi exibido com essa cor mudará automaticamente de cor.

Para redefinir as cores para seus valores iniciais (inicial no momento em que xterm foi iniciado), com xterm :

printf '\e]104\a'

Ou para redefinir uma única cor:

printf '\e]104;1\a'

Para consultar o valor atual de uma cor, há uma seqüência de controle que faz com que xterm envie de volta o valor como entrada de terminal. Você pode usar o comando xtermcontrol para facilitar:

$ xtermcontrol --get-color1
rgb:ffff/ffff/0000

Mas isso só funciona para as primeiras 16 cores ( xterm atualmente suporta 256).

Em terminais que não suportam redefinir as cores para seus padrões, mas suportam 256 cores à la xterm , você pode querer usar as cores 17 e acima, já que elas raramente são usadas pelos aplicativos.

No entanto, note que algum banco de dados terminfo especifica incorretamente como atribuir e usar essas cores para esses terminais, assim você pode querer codificar as seqüências de escape da força $TERM para algo como xterm-256color .

printf '\e]4;17;rgb:ff/ff/00\a\e[38;5;17mThis is yellow\e[m\n'
printf '\e]4;18;rgb:ff/00/ff\a\e[38;5;18mThis is magenta\e[m\n'
    
por 05.12.2013 / 20:49