Introdução
Minha pergunta surge da necessidade de entender por que agora tenho (após várias tentativas) o Terminal e o tmux suportando 256 cores e tput colors
me dizendo que existem apenas 8 delas.
fundo
Vamos começar do começo.
Estou usando uma caixa do Ubuntu , Guake , tmux , Vim e adoro o tema Solarized . Eles estavam com uma aparência horrível, então decidi ativar o suporte para 256 cores e brincar um pouco.
Vamos ver o que acontece no meu terminal . tput colors
diz que existem 8 cores. Pessoalmente, defino-os como roxo, à esquerda e, claro, à direita, temos 2 tons diferentes de azul. $TERM
diz xterm
. (Para ter o colorido ls
I eval
este no meu .bashrc
.)
O Vim também parece bem, apesar do fato de eu chamá-lo com a 256
bandeira em um ambiente em que 256 cores não são suportadas.
set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized
O único cara que reclama do espaço reduzido de cores é o tmux . A chamada tmux
fornece os resultados esperados "errados".
Mas chamar tmux
com a -2
bandeira faz tudo funcionar bem, magicamente .
Agora, a única coisa que eu entendo é que -2
é equivalente a export TERM=screen-256color
( fonte ).
Guake se comporta de maneira análoga ao Terminal e os dois respondem xterm
à pergunta echo $TERM
.
Pergunta, questão
Basicamente, alguém entende por que tudo funciona, mesmo que não deveria?
- Estou sádico por reclamar por que as coisas funcionam? Talvez.
- Existe uma razão melhor? Claro: gostaria de corrigir a aparência de outras caixas do Ubuntu no meu escritório e gostaria de entender por que as coisas funcionam ou não.
Experiências adicionais
A execução desse script (ligeiramente modificado) no meu xterm
fornece o seguinte resultado: 256 cores, mas apenas 16 são exibidas corretamente.
Então, mudando o perfil do terminal, também essas 16 cores mudam.
Mais testes estão a seguir.
Da esquerda para a direita, de cima para baixo, temos o tema de cores Solarizeddircolor
ansi-dark
e 256dark
, em seguida , o esquema de cores padrão ( Tango ) dircolor
ansi-dark
e 256dark
.
Observação : em teoria, o dircolor
ansi-dark
on Solarizado esquema de cores deve ter jogo de perto a dircolor
256dark
. Isso não está acontecendo claramente para os arquivos listados específicos. Em vez disso, isso acontece quando no diretório de trabalho existem pastas , arquivos de texto e links simbólicos . Conclusão : não foi dada muita atenção ao codificar as 256dark
cores.
Conclusões preliminares
xterm
suporta 256 cores, apesar do que tput colors
diz. Os programas podem se referir à ansi
paleta (personalizável pelo usuário) ou definir suas cores, escolhendo um total de 256 cores.
tput colors
é um teste não confiável. Você poderia verificar minhas conclusões preliminares ?tput colors
só é possível retornar um valor e, nos terminais que suportam qualquer uma das 2,8,16,88 ou 256 cores, apenas o primeiro valor (8 no seu caso) é retornado. Para obter o valor verdadeiro, use o script do meu último comentário. O que isso retorna?Respostas:
Há algumas informações sobre o suporte de 256 cores nas perguntas frequentes do tmux .
Infelizmente, a detecção do número de cores que o terminal suporta não é direta, por razões históricas. Consulte Verificando quantas cores meu emulador de terminal suporta para obter uma explicação. Isso significa que
Quando você está no tmux, o terminal com o qual você está interagindo é o tmux. Ele não suporta todas as seqüências de controle do xterm. Em particular, ele não suporta a
OSC 4 ; …
sequência de controle para consultar ou definir valores de cores. Você precisa usá-lo enquanto estiver executando diretamente no xterm, fora do tmux.Se você executar
tmux -2
, o tmux começará com suporte para 256 cores, mesmo que não pense que seu terminal suporta 256 cores (o que é bastante comum).Por padrão, o tmux se anuncia
screen
sem suporte a 256 cores. Você pode alterar o valor deTERM
in.tmux.conf
para indicar suporte para 256 cores:Você pode usar
TERM=xterm-256color
ouTERM=screen-256color
no Ubuntu. Esses valores só causarão problemas se você efetuar login em uma máquina remota que não tenha uma entrada termcap / terminfo para esses nomes. Você pode copiar as entradas para o diretório inicial na máquina remota; isso funciona com a maioria das implementações modernas de terminfo.fonte
xterm
foi capaz de me mostrar 256 cores, emboratput colors
estivesse dizendo 8. Acho que a resposta a essa pergunta específica foi abordada por @terdon em seus comentários à pergunta em si.set -g default_terminal "screen-256color"
comando não é suficiente para ativar as 256 cores no tmux . Você precisaalias tmux='export TERM=screen-256color; /usr/bin/tmux'
( referência ).tmux -2
conforme meu parágrafo anterior, se o tmux não achar que seu terminal atual suporta 256 cores, issoalias tmux='tmux -2'
faria sentido.TERM=xterm-256color tmux
, o que é sensato, diferenteTERM=screen-256color tmux
.tmux -2
é superior porque funciona mesmo quescreen-256color
não esteja no banco de dados terminfo local.Estou impressionado com o quão ricamente formatadas e detalhadas são as respostas (e a pergunta!). Embora eles forneçam informações e soluções valiosas sobre as ferramentas mencionadas, eles fornecem muito pouco conhecimento sobre o que está acontecendo e, o mais importante, por que as coisas estão (um pouco) funcionando para algumas ferramentas quando, supostamente, não deveriam.
Então, aqui estão algumas idéias sobre suas perguntas fundamentais:
O que um terminal suporta e o que ele relata são coisas diferentes. O terminal Gnome, por exemplo, é capaz de exibir 256 cores, mas se anuncia ao ambiente (via
$TERM
variável) como umxterm
emulador (8 cores).Ferramentas como
tput
seguem o queTERM
estiver definido como:tput colors
podem imprimir 8, enquantoenv TERM=xterm-256color tput colors
imprimirão 256, independentemente se o seu terminal realmente suportar esses recursos.vim
também segueTERM
por padrão, mas como você disse para usar 256 cores (através da bandeira ou doset t_Co=256
), ele usará 256 cores. E funciona porque o seu terminal realmente suporta isso.tmux
, assim como o Gnome Terminal, também por padrão se reporta como um terminal de 8 cores. Mas, diferentemente do Gnome Terminal, ele só habilita a capacidade de 256 cores se você usar o-2
sinalizador, o que também o faz se reportar como umxterm-256color
emulador compatível.xterm
, como no software de emulador de terminal para o X11 , suporta 256 cores, com certeza. Masxterm
comoTERM=xterm
é um "padrão" de 8 cores. Significa os recursos do originalxterm
. Quando foi atualizado para suportar 256 cores, há muito tempo, cunhou oxterm-256color
termo para isso.Então tudo se resume a:
Quais recursos o seu terminal realmente suporta (e está habilitado para isso)
Como ele relata esses recursos ao ambiente via
TERM
Como as ferramentas interpretam
TERM
e se ajustam de acordo.Como você pode inferir do exposto, evite martelar
export TERM=xterm-256color
em seus~/.bashrc
scripts . Como esses arquivos são executados independentemente do terminal que você está realmente usando, todos os seus terminais, incluindo conexões remotas do Windows com Putty, terminal de console Linux etc., se reportam como compatíveis com xterm-256color. O que pode ser verdade para alguns, mas certamente não para todos. Por exemplo,getty
o console linux com o qual você acessaCTRL+ALT+1..6
não.Os terminais devem se reportar como o "padrão" com o qual são mais compatíveis. Se você souber que eles podem lidar com 256 cores, configure-os para anunciar como tal.
Por último, mas não menos importante, uma leitura incrível sobre
TERM
e 256 cores é:http://blog.sanctum.geek.nz/term-strings/
http://blog.sanctum.geek.nz/256-colour-terminals/
fonte
Fornecerei uma resposta complementar que aborda apenas suas experiências adicionais, na medida em que elas se relacionam às cores do diretório solarizado .
Configuração
Temos a mesma saída de cor do script de teste. A única diferença é que eu usei
lxterminal
no Openbox com slim , xcompmgr e sem DM. Portanto, não posso definir facilmente uma paleta personalizada, como você fez, pois esse emulador de terminal não oferece essas configurações em uma GUI e não há um tema específico para ela (elas existem apenas para alguns emuladores de terminal). Então, eu apenas uso translúcidos, terminais não decorados e essa cor azul como primeiro plano com um fundo azul do Gentoo . Como não posso usar as versões ansi dos arquivos de cores, concentrei-me exclusivamente em obter resultados comdircolors.256dark
a versão simples "degradada".Usei a seguinte configuração relevante e a fonte inconsolata medium:
Dircolors
A imagem abaixo mostra o que acontece dentro e fora do tmux com essas configurações. O primeiro terço à esquerda mostra janelas finais sem decoração empilhadas verticalmente (3). À direita, você tem um assembly tmux mostrando os mesmos programas idênticos (3) Eu também incluí um 1 solarizado mostrando o nano usando o arquivo .Xresources incluído no pacote completo (e amostrando-o com ):
xterm
xrdb -load ~/.Xresources
clique com o botão direito do mouse / veja a imagem para inspecionar em resolução máxima
O primeiro terminal no canto superior esquerdo mostra as cores do diretório padrão. Logo abaixo está a versão solarizada degradada . Exceto pelo fundo rosa em azul para os
.c
arquivos que eu adicionei, é idêntico ao esperado com isso (veja a imagem abaixo para referência). Comparado aos padrões, ele se baseia nos atributos estendidos, como negrito / claro / reverso etc. e as cores são diferentes, obviamente. A atribuição de cores padrão para.txt
arquivos em várias distribuições é verde, mas deve ser cinza quando solarizada . Um arquivo ansi que processa um arquivo .txt como verde não está processando corretamente ou não está processando. Os resultados do lado direito que você mostrou são os corretos (256dark) em relação à seguinte referência:mapa de referência dircolors "degradado" solarizado
Observações
Com a configuração que usei, os resultados parecem idênticos dentro e fora do tmux ( invertei os comentários (#) no vi, mas, caso contrário, o plug-in se comporta como deveria e o multiplexador não tem impacto nisso). As fontes desempenham um papel importante na definição de recursos solarizados e é necessária uma boa fonte para maximizar a experiência. As cores do diretório solarizado usando o arquivo 256dark correspondem à referência e não requerem configuração específica do emulador de terminal.
Conclusão
Na verdade, a renderização ansi das cores do diretório é completamente completamente diferente da solarizada degradada (256dark). Tanto é assim que nos arquivos ansi
.txt
são verdes. Um não pode ser usado para validar a renderização do outro. Ambas as soluções precisam de configuração diferente e produzem resultados totalmente diferentes.fonte
ansi-dark
saída correta (já que está usando a versão não degradada). Então, se você tomar como referência a saída do256dark
, terá a mentalidade invertida.