Como verificar a capacidade de cor do terminal a partir da linha de comando?

0

Eu escrevo:

  $ infocmp -1 xterm
        ...
    colors#8,
    bold=\E[1m,
    blink=\E[5m,
        ...
  $ tput -Txterm colors && echo OK || echo err
8
OK
  $ tput -Txterm blink && echo OK || echo err
^[[5mOK

Assim, posso usar tput para verificar os recursos de retminal.

Esta alma é portátil? Existem outras soluções?

Ou pode ser que eu possa ficar com a solução:

  $ [ $TERM = xterm ] && echo ok || echo err
ok

Um uso é definir o PS1 em .bashrc. Outra saída highliting para chamar a atenção do script sh. Eu posso usar essa solução:

PS1='bash# '
case "$TERM" in
  xterm*) PS1='\[3[35m\]bash# \[3[0m\]'
  ;;
esac

que usa apenas o comando interno do bash (tão eficiente) e funciona para todos os meus casos, mas infelizmente não é portável.

    
por gavenkoa 16.08.2011 / 16:55

2 respostas

1

Usar tput é portável para um grande número de sistemas operacionais.

No entanto, a verificação do código de retorno indica apenas se o banco de dados terminfo da plataforma possui uma definição desse recurso em sua entrada para 'xterm'.

O código de retorno não informa se o cliente 'xterm' usado atualmente suporta esse recurso.

Observe que há uma grande variedade de programas de software que afirmam ser compatíveis com 'xterm' . É certamente provável que nem todos eles suportem todos os recursos 'xterm', especialmente considerando que tem havido várias versões consecutivas da implementação de referência do xterm liberado e provavelmente alguns garfos. O mantenedor do xterm diz "Nenhum implementa até a metade dos controles do xterm".

Até onde eu sei, nenhum dos corpos de padrões usuais (ANSI, ECMA, The Open Group) publicou um padrão que define o xterm. O mantenedor atual do xterm também mantém um programa de teste vt100 (vttest) para auxiliar no seu trabalho xterm.

Portanto, provavelmente não há como um aplicativo em si poder fazer uso do valor TERM para ter certeza de que um terminal reivindicado como um xterm realmente suporta um recurso xterm específico. Pelo menos não para qualquer escolha arbitrária do recurso xterm. Se você envolver um humano (se bem me lembro, vttest), você pode ter uma chance melhor.

    
por 16.08.2011 / 17:24
4

Sim, é portátil. Que tal isso:

# BASH : Configure things differently if current terminal has >= 8 colors.
if which tput > /dev/null 2>&1 && [[ $(tput -T$TERM colors) -ge 8 ]]; then
    echo "Configure stuff to use colors here!"
else
    echo "No tput or less than 8 colors, default to no coloring"
fi
    
por 20.06.2013 / 22:17