Por que o xterm exibe 256 cores (não xterm-256color)?

11

Alguém poderia explicar isso? Estou usando gnome-terminal . Primeiro, algumas informações:

# echo $TERM
xterm

# infocmp xterm
Reconstructed via infocmp from file: /lib/terminfo/x/xterm
colors#8, cols#80, it#8, lines#24, pairs#64

# tput colors
8

Eu escrevi um script simples para criar códigos para um conjunto estendido de cores:

# Output file (current directory) and text.
OFILE='xterm256_colors_test.sh'
OFILE_COLORS='terminal_256_colors'
OTEXT='Sed ut perspiciatis unde omnis iste natus error sit voluptatem...'

# Clearing the contents from previous runs.
if [ -e $OFILE ] || [ -e $OFILE_COLORS ]
then
  > $OFILE
  > $OFILE_COLORS
fi

# Bang!
echo -e '#!/bin/bash\n' | tee --append $OFILE $OFILE_COLORS &> /dev/null
echo -e "\necho -e \"" | tee --append $OFILE &> /dev/null

# \x1b is a control character changing behaviour of the shell.
# It is also the <Ctrl+V><Esc> sequence.
for i in {016..255}; do
  echo -e "\x1b[38;5;${i}m $OTEXT $i \x1b[0m" >> $OFILE
  echo -e "color${i}=\"\[3[38;5;${i}m\]\"" >> $OFILE_COLORS
done

# End of echo.
echo '"' | tee --append $OFILE &> /dev/null

# The file should be executable.
chmod +x $OFILE

Apesar do emulador de terminal xterm básico quando executo o script gerado, posso ver todas as 240 cores. Por quê? Achei que deveria alterar $TERM para xterm-256color primeiro.

    
por Kamil 23.05.2015 / 22:21

1 resposta

18

A variável de ambiente TERM é uma maneira que você, o usuário, pode informar programas (por exemplo, emacs , grep , less , ls e vim ) em que tipo de terminal eles estão sendo executados, para que eles saibam quais são seus parâmetros, incluindo quais recursos ele possui e quais seqüências de escape precisa emitir para acessá-los. Isso existe porque é muito difícil, em geral, para o software para determinar isso por si (e era praticamente impossível quando os usuários interagiam com computadores através de terminais que eram externos, e só conectado ao computador por um cabo de dados).

gnome-terminal é um programa que fornece serviços semelhantes a terminais para o usuário e os programas que o usuário executa dentro do terminal. gnome-terminal pode estar ciente das variáveis de ambiente que foram definidos em seu ambiente, antes de ser invocado ( DISPLAY sendo o exemplo óbvio), mas não tem conhecimento de variáveis de ambiente que são definidas nos processos que estão sendo executados sob ele.

Portanto, gnome-terminal tem todas as capacidades que possui. Pode ser possível ajustar / restringir esses fatores externamente, por exemplo, por meio de opções de linha de comando, o ambiente pré-existente, arquivos de configuração e diálogos no quadro da janela, mas não alterando TERM no shell na janela. Se é capaz de exibir 256 cores, então é capaz de exibir 256 cores, e você será capaz de fazer isso enviando as seqüências de escape apropriadas. Mas, contanto que você tenha TERM definido como xterm , os programas que você executa acreditarão que você está dizendo a eles que eles estão funcionando em um terminal compatível com oito cores, e assim eles restringirão seus pedidos (seqüências de escape) para esses recursos . Você precisa definir TERM para xterm-256color , para não permitir que gnome-terminal exiba 256 cores, mas para dizer programas como grep e ls para perguntar para usar mais de 8 cores.

    
por 24.05.2015 / 00:03