Estou no processo de colorir o meu terminal PS1
.
Estou definindo variáveis de cores usando tput
; por exemplo, aqui está roxo:
PURPLE=$(tput setaf 125)
Pergunta, questão:
Como encontro os códigos de cores (por exemplo 125
) de outras cores?
Existe algum guia / tabela de cores em algum lugar?
Só não tenho certeza do que 125
é ... Existe alguma maneira de pegar uma cor hexadecimal e converter em um número que setaf
possa ser usado?
Respostas:
A contagem de cores disponíveis para o tput é dada por
tput colors
.Para ver as 8 cores básicas (usadas
setf
no terminal urxvt esetaf
no terminal xterm):E geralmente chamado assim:
Para ver as 256 cores estendidas (conforme usadas
setaf
no urxvt):Se você deseja números e uma saída ordenada:
As 16 milhões de cores precisam de bastante código (alguns consoles não podem mostrar isso).
O básico é:
fb
éfront/back
ou3/4
.Um teste simples da capacidade do console de apresentar tantas cores é:
Apresentará uma linha vermelha com uma mudança muito pequena no tom da esquerda para a direita. Se essa pequena alteração estiver visível, seu console poderá ter 16 milhões de cores.
Cada
r
,g
eb
é um valor de 0 a 255 para RGB (Red, Green, Blue).Se o seu tipo de console suportar isso, este código criará uma tabela de cores:
Para converter um valor de cor hexadecimal em um índice de cores 0-255 (mais próximo):
Use-o como:
Para encontrar o número da cor conforme usado no formato de cores HTML :
Use-o como ("básico" são as primeiras 16 cores, "cor" é o grupo principal, "cinza" é as últimas cores cinza):
fonte
fromhex
. Obrigado novamente! Além disso, adicionei uma verificação para o#
. Comentários?hex=${1#"#"}
. Ele não removerá nada se$1
não tiver um#
e removerá se existir. Veja meu código atualizado.\e[0;%s8;2;%s;%s;%sm
, não me dá 16 milhões de cores, apenas a cor da paleta de 240 cores mais próxima do rgb solicitado.A resposta curta é que você pode encontrar na web tabelas de cores e combiná-las com o número da cor.
A resposta longa é que o mapeamento correto depende do terminal -
O
125
é um parâmetro para uma sequência de escape referidasetaf
na descrição do terminal.tput
não atribui nenhum significado particular ao número. Isso realmente depende do emulador de terminal específico.Há um tempo, o ANSI definia códigos para 8 cores e havia dois esquemas para numerá-los. Os dois são vistos em algumas descrições de terminais como pares
setf/setb
ousetaf/setab
. Como o último tem a conotação de "cores ANSI", você verá que é usado com mais frequência. O antigo (setf / setb) alterou a ordem de vermelho / azul, conforme observado nas Perguntas frequentes das ncurses Por que o vermelho / azul é trocado? , mas em ambos os casos, o esquema foi estabelecido apenas para numerar as cores. Não há relacionamento predefinido entre esses números e o conteúdo RGB.Para emuladores de terminal específicos, existem paletas de cores predefinidas que podem ser enumeradas com bastante facilidade - e podem ser programadas usando essas seqüências de escape. Não há padrões relevantes e você verá diferenças entre os emuladores de terminal, conforme observado nas Perguntas frequentes do xterm . Não gosto desse tom de azul .
No entanto, a convenção costuma ser confundida com os padrões. No desenvolvimento do xterm nos últimos 20 anos, incorporou cores ANSI (8), adaptou as cores do
aixterm
recurso (16), adicionou extensões para 88 e 256 cores. Muito disso foi adotado por outros desenvolvedores para diferentes emuladores de terminal. Isso está resumido nas Perguntas frequentes do xterm Por que não fazer "xterm" igual a "xterm-256color"? .O código-fonte xterm inclui scripts para demonstrar as cores, por exemplo, usando as mesmas seqüências de escape que
tput
seriam usadas.Você também pode achar útil esta pergunta / resposta: Valores RGB das cores no índice de cores estendidas da Ansi (17-255)
fonte
O
tput
utilitário está usando uma tabela de pesquisa de 256 cores para imprimir seqüências de escape ANSI de 8 bits (iniciando com Esce[
) que utiliza os recursos do terminal , para que essas seqüências de controle possam ser interpretadas como cores. Estes são um conjunto predefinido de 256 cores, comumente usadas em placas gráficas.Para imprimir todas as 256 cores no terminal, tente a seguinte linha:
Dica: Anexe
| column
à lista de colunas.Esta tabela de pesquisa de 256 cores também pode ser encontrada na página da Wikipedia da seguinte forma:
fonte
Com zsh e num
xterm
terminal de -como (xterm
evte
terminais baseados comognome-terminal
,xfce4-terminal
... pelo menos) que você pode fazer:O equivalente do bash:
(você deseja que a sequência de escape consulte a cor a ser enviada após a disciplina do terminal
echo
ser desativada (com-s
); caso contrário, a resposta será exibida pela disciplina de linha na metade do tempo, portanto, o envio dela como parte doread
prompt (var?prompt
em zsh como no ksh,-p prompt
no bash)).para obter a definição da cor 125 (aqui como uma especificação RGB, cada número sendo a intensidade dos componentes Vermelho, Verde e Azul como um número hexadecimal entre 0 e FFFF).
Você pode fazer o mesmo nas 16 primeiras cores com o
xtermcontrol
comando:fonte
tput colors
informa apenas8
se o terminal é capaz de apresentar 256 cores. Além disso, o xterm-color (Konsole)tput colors
somente reporta8
mesmo que esse terminal seja totalmente capaz de apresentar 16 milhões de cores (e todas as 256 cores, é claro). E não, nenhum tmux ou tela que possa "colorir" :-) (altere isso) os resultados (eu estava ciente desse detalhe). Em resumo: seu código pode falhar em alguns terminais / consoles.Cores ANSI no termo do console
Dependendo de qual protocolo de termo o console usa, a sequência pode ser:
\e[38;5;XXXm
ou\e[3XXXm
ondeXXX
corresponde ao número da ansi.Para garantir que você use a sequência ANSI correta, você deve usar
tput
.Em relação ao código de escape ANSI da Wikipedia , escrevi o seguinte:
Pode render algo como:
... Então, porque eu odeio rodar mais de 200 garfos em um pequeno script, escrevi isso:
Com apenas 1 garfo! Mesmo resultado, mas muito mais rápido!
fonte