Pourquoi xterm affiche 256 couleurs (pas xterm-256color)?

11

Quelqu'un pourrait-il expliquer cela? J'utilise gnome-terminal. Tout d'abord, quelques informations:

# 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

J'ai écrit un script simple pour créer des codes pour un ensemble étendu de couleurs:

# 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

Malgré l' xtermémulateur de terminal de base lorsque j'exécute le script généré, je peux voir les 240 couleurs. Pourquoi? Je pensais que je devrais passer $TERMen xterm-256colorpremier.

Kamil
la source

Réponses:

18

La TERMvariable d'environnement est une façon que vous, l'utilisateur, peut dire des programmes (par exemple, emacs, grep, less, lset vim) quel type de terminal qu'ils en cours d' exécution, donc ils sauront ses paramètres, y compris les capacités dont il dispose et quelles séquences d'échappement ils besoin d'émettre pour y accéder. Cela existe parce qu'il est trop difficile, en général, pour le logiciel de déterminer cela par lui-même (et c'était à peu près impossible lorsque les utilisateurs interfaçaient avec des ordinateurs via des terminaux externes et uniquement connectés à l'ordinateur par un câble de données).

gnome-terminalest un programme qui fournit des services de type terminal à l'utilisateur et les programmes que l'utilisateur exécute dans le terminal.  gnome-terminalpeut être au courant des variables d'environnement qui ont été définies dans son environnement, avant son appel (en DISPLAYétant l'exemple évident), mais il n'a aucune connaissance des variables d'environnement qui sont définies dans les processus qui s'exécutent sous lui.

Donc, gnome-terminala toutes les capacités dont il dispose. Il peut être possible d'ajuster / contraindre ces paramètres en externe, par exemple, via les options de ligne de commande, l'environnement préexistant, les fichiers de configuration et les boîtes de dialogue dans le cadre de la fenêtre, mais pas en changeant TERMle shell dans la fenêtre. S'il est capable d'afficher 256 couleurs, alors il est capable d'afficher 256 couleurs, et vous pourrez le faire faire en lui envoyant les séquences d'échappement appropriées. Mais, aussi longtemps que vous l'avez TERMdéfini xterm, les programmes que vous exécutez croiront que vous leur dites qu'ils s'exécutent dans un terminal compatible huit couleurs, et donc ils limiteront leurs demandes (séquences d'échappement) à ces capacités . Vous devez définir TERMsur xterm-256color, pas pour activergnome-terminald'afficher 256 couleurs, mais de dire aux programmes comme grepet lsde lui demander d'utiliser plus de 8 couleurs.

G-Man dit «Réintègre Monica»
la source
Vaguement lié: où la variable d'environnement TERM par défaut est-elle définie?
G-Man dit `` Réintègre Monica ''