Criando dotfiles para iTerm.app e Terminal.app - como detectar 256 cores suportadas?

1

Estou criando dotfiles personalizados ( .bash_profile e similares) para uso com o Terminal.app e o iTerm.app do OS X.

Gostaria de definir algumas configurações condicionalmente, com base no fato de o aplicativo ativo suportar 256 cores ou não. (iTerm.app suporta, mas o Terminal.app não.) Isso seria possível usando uma declaração if (pseudo-código):

if 256_COLOR_SUPPORT; then
  # Make use of all available colors (iTerm.app)
else
  # Fall back to 16-color mode (Terminal.app)
fi

O problema é que não sei como escrever a condição para a declaração if .

Daí a minha pergunta: é possível detectar 256 cores de suporte? Se sim, como?

Atualização: descobri como detectar em qual aplicativo de terminal estou atualmente:

iTerm.app:

$ echo $TERM_PROGRAM
iTerm.app

Terminal.app:

$ echo $TERM_PROGRAM
Apple_Terminal

Então, por enquanto, estou usando a seguinte verificação:

if [ $TERM_PROGRAM == "iTerm.app" ]; then
  # Groovy 256-color stuff
fi

Eu ainda gostaria de saber se é possível detectar o número de cores disponíveis no aplicativo ativo. Eu tentei tput colors , mas isso parece inútil, já que Terminal.app está e retorna 256 .

    
por Mathias Bynens 25.03.2011 / 12:03

3 respostas

2

Isso pode ser feito através da variável TERM. Normalmente, ele seria configurado para "xterm", mas em um terminal de 256 cores você pode configurá-lo para "xterm-256color". O banco de dados terminfo tem uma entrada apropriada para isso, e muitos programas mudam automaticamente para o modo de 256 cores quando vêem "xterm-256color".

(O Terminal.app realmente não tem suporte para 256 cores?)

    
por 25.03.2011 / 12:51
1

Eu tive um pouco do mesmo problema, e a maneira como forçar o terminal.app em 8 bits é ir para:

  1. Preferências;
  2. Configurações;
  3. Escolher esquema de cores;
  4. guia Avançado.
  5. Em seguida, defina "declarar terminal como" para xterm-color em vez de xterm-256color
por 02.08.2011 / 00:24
0

tput colors retorna o número de cópias suportadas pelo tipo de terminal atual:

matt@dell:~$ tput colors
8

Você pode capturar isso em uma variável:

COLORS=$(tput colors)

e compare essa variável com valores conhecidos / esperados

if [ $COLORS -eq 256 ]; then
   ... do your 256 colour stuff
else
   ... just 16 or 8 colours (16 is 8 colours in normal and bright mode)
fi

Atualizar

Sua atualização aconteceu enquanto eu escrevia essa resposta.

Você deve forçar o Terminal.app a usar um tipo de terminal de 8 cores (não sei como)

    
por 25.03.2011 / 12:50