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}=\"\[\033[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 xtermemulador de terminal básico , quando executo o script gerado, posso ver todas as 240 cores. Por quê? Eu pensei que deveria mudar $TERMpara o xterm-256colorprimeiro.

Kamil
fonte

Respostas:

18

A TERMvariável de ambiente é uma forma que você, usuário, pode dizer-programas (por exemplo, emacs, grep, less, ls, e vim) o tipo de terminais que estão em execução no, para que eles saibam seus parâmetros, incluindo o que capacidades tem e quais seqüências de escape eles precisa emitir para acessá-los. Isso existe porque é muito difícil, em geral, para o software determinar isso por si mesmo (e era praticamente impossível quando os usuários faziam interface com os computadores por meio de terminais externos, e somente conectados ao computador por um cabo de dados).

gnome-terminalé um programa que fornece serviços semelhantes ao terminal para o usuário e os programas que o usuário executa dentro do terminal.  gnome-terminalpode estar ciente das variáveis ​​de ambiente que foram definidas em seu ambiente, antes de DISPLAYserem chamadas ( sendo o exemplo óbvio), mas não tem conhecimento das variáveis ​​de ambiente definidas nos processos em execução sob ele.

Então, gnome-terminaltem todas as capacidades que tem. Pode ser possível ajustar / restringir esses fatores externamente, por exemplo, por meio de opções de linha de comando, do ambiente preexistente, de arquivos de configuração e de diálogos no quadro da janela, mas não alterando TERMo shell na janela. Se for capaz de exibir 256 cores, poderá exibir 256 cores, e você poderá fazer isso enviando as seqüências de escape apropriadas. Mas, desde que você tenha TERMdefinido xterm, os programas executados acreditarão que você está dizendo que eles estão sendo executados em um terminal compatível com oito cores e, portanto, restringirão seus pedidos (seqüências de escape) a esses recursos . Você precisa definir TERMpara xterm-256color, não para permitirgnome-terminalpara exibir 256 cores, mas para dizer programas como grepe lspara perguntar -se usar mais de 8 cores.

G-Man diz que 'restabelece Monica'
fonte
Vagamente relacionado: onde a variável de ambiente TERM padrão é definida?
G-Man diz 'Reinstate Monica'