O comando tput
possui duas opções diferentes para definir a cor setf
e setaf
, no entanto, ambas parecem funcionar bem no meu computador:
$ tput setf 2 && echo 'Hello world!'
$ tput setaf 2 && echo 'Hello world!'
Parece haver uma dualidade semelhante com setb
e setab
.
Qual é a diferença entre as duas opções?
terminfo(5)
página de manual que acompanhancurses
para obter detalhes.Respostas:
setf
é limitado a apenas 8 cores.setaf
pode configurar até 256 cores.(todas as informações a seguir serão específicas para o urxvt, como esse é o meu terminal, mas as informações serão semelhantes, se não iguais, aos outros terminais)
Ambos
setf
esetaf
fornecem um código de escape diferente. Você pode ver isso da seguinte maneira:Na minha
urxvt(7)
página de manual:Assim, a partir da
xxd
saída acima , podemos ver quetput setf 2
usa oPm = 32
, que definirá a cor para verde.tput setaf 2
por outro lado, usa oPm = 38;5
, que obtém representa o código de cores definido na ISO 8613-6 (também verde).Na ISO 8613-6, as cores 0x00-0x07 são iguais às cores padrão e 0x08 - 0x0f são as cores "negrito" padrão. Depois de chegar a 0x10-0xff, você obtém novas cores.
Roubado da wikipedia :
fonte
tput
parece não usar realmente os intervalos de sequência de cores ANSI disponíveis. Para qualquern > 7
,tput setaf n
não tem efeito sobre o texto no meu terminal.tput setf 2
etput setaf 2
são ambos.[32m
.Do manual:
man 5 terminfo
Portanto, a resposta é: setaf significa Definir primeiro plano ANSI , ou seja, use sequências de escape ANSI, e setf significa Definir primeiro plano (usando algumas seqüências de escape que não sejam ANSI).
fonte
Os dois conjuntos de recursos usam pedidos diferentes para vermelho / azul na lista de cores ANSI.
Como observado, é explicado na página de manual do ncurses terminfo . Alguma história:
setf/setb
.Sf/Sb
códigos correspondentes em vez desetaf/setab
(eAF/AB
para termcap) - mas usando as seqüências de escape ANSI (que funcionam com termcap) em vez de usar os recursos corretos com os recursos ANSI.O ANSI
setaf/setab
foi adicionado bastante tarde no histórico do terminfo, como você pode inferir de sua posição na lista de cadeias de recursos . Lembre-se de que eles foram adicionados em etapas ao longo de alguns anos e alguns sistemas diferiram (o ncurses tem alguns exemplos, comoCaps.hpux
permitir que ele seja compilado para corresponder a esses sistemas). Isso foi responsável pelo pequeno número de descrições úteis de terminais que poderiam ser usadas como referência.Com tudo isso, o fato de as
setf/setb
seqüências existentes não corresponderem à ordem ANSI não foi percebido imediatamente, o que levou a algumas correções em 1998 , e as perguntas frequentes Por que as trocas de vermelho e azul? .Embora fosse possível estender a sequência ANSI de 8 cores para 16 cores (supondo que as cores 8 a 15 fossem versões mais brilhantes de 0 a 7), não havia boas razões para inventar um esquema para estender
setf/setb
as 16 primeiras cores.fonte