¿Por qué xterm muestra 256 colores (no xterm-256color)?

11

¿Alguien podría explicar esto? Estoy usando gnome-terminal. Primero, alguna información:

# 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

Escribí un script simple para crear códigos para un conjunto extendido de colores:

# 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

A pesar del xtermemulador de terminal básico cuando ejecuto el script generado, puedo ver los 240 colores. ¿Por qué? Pensé que debería cambiar $TERMa la xterm-256colorprimera.

Kamil
fuente

Respuestas:

18

La TERMvariable de entorno es una manera que usted, el usuario, puede decirle a los programas (por ejemplo, emacs, grep, less, ls, y vim) qué tipo de terminal que están ejecutando en, para que sepan sus parámetros, incluyendo las capacidades que tiene y qué secuencias de escape que se necesita emitir para acceder a ellos. Esto existe porque es demasiado difícil, en general, que el software determine esto por sí mismo (y era casi imposible cuando los usuarios interactuaban con computadoras a través de terminales que eran externos, y solo se conectaban a la computadora mediante un cable de datos).

gnome-terminales un programa que proporciona servicios de tipo terminal al usuario y los programas que el usuario ejecuta dentro del terminal.  gnome-terminalpuede conocer las variables de entorno que se establecieron en su entorno, antes de que se invoque ( DISPLAYsiendo el ejemplo obvio), pero no tiene conocimiento de las variables de entorno que se establecen en los procesos que se ejecutan en él.

Entonces, gnome-terminaltiene todas las capacidades que tiene. Puede ser posible ajustar / restringir esto externamente, por ejemplo, a través de las opciones de línea de comandos, el entorno preexistente, los archivos de configuración y los cuadros de diálogo en el marco de la ventana, pero no cambiando TERMel shell en la ventana. Si es capaz de mostrar 256 colores, entonces es capaz de mostrar 256 colores, y podrá hacer que lo haga enviándole las secuencias de escape apropiadas. Pero, siempre que lo haya TERMconfigurado xterm, los programas que ejecute creerán que les está diciendo que se están ejecutando en un terminal con capacidad para ocho colores, por lo que restringirán sus solicitudes (secuencias de escape) a esas capacidades . Es necesario establecer TERMque xterm-256color, de no permitirgnome-terminalpara mostrar 256 colores, pero a decir programas como grepy lspara pedir que utilizar más de 8 colores.

G-Man dice 'restablecer a Mónica'
fuente
Relacionado vagamente: ¿dónde se establece la variable de entorno TERM predeterminada?
G-Man dice 'Restablecer a Monica'