Présentation
Ma question découle de la nécessité de comprendre pourquoi J'ai maintenant (après plusieurs essais) Terminal et tmux prenant en charge 256 couleurs et tput colors
me disant qu'il n'y en a que 8.
Contexte
Commençons par le début.
J'utilise un Ubuntu boîte, Guake , tmux , Vim et j'adore le thème Solarized . Ils avaient l'air assez affreux, alors j'ai décidé d'activer le support de 256 couleurs et de jouer un peu.
Voyons ce qui se passe pour mon Terminal . tput colors
dit qu'il y a 8 couleurs. Personnellement, je les ai mis en violet, à gauche, et bien sûr à droite, nous avons 2 nuances de bleu différentes. $TERM
dit xterm
. (Pour avoir le ls
coloré J'eval
ceci dans mon .bashrc
.)
Vim semble également bien, malgré le fait que je l'appelle avec le 256
signaler dans un environnement où 256 couleurs ne sont pas pris en charge.
set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized
Le seul gars qui se plaint de l'espace colorimétrique réduit est tmux . Appel de tmux
fournit les "mauvais" résultats attendus.
Mais appeler tmux
avec le -2
flag fait que tout fonctionne bien, magiquement .
Maintenant, la seule chose que je comprends, c'est que -2
est équivalent à export TERM=screen-256color
(source).
Guake se comporte de manière analogue à Terminal et les deux répondent xterm
à la question echo $TERM
.
Question
En gros, est-ce que quelqu'un comprend pourquoi tout fonctionne même si ça ne devrait pas ?
- Suis-je sadique de me plaindre du fonctionnement des choses ? Peut-être.
- Y a-t-il une meilleure raison ? Bien sûr :j'aimerais corriger l'apparence d'autres boîtes Ubuntu dans mon bureau, et j'aimerais comprendre pourquoi les choses fonctionnent ou ne fonctionnent pas.
Tests supplémentaires
Exécuter ce script (légèrement modifié) sur mon xterm
donne le résultat suivant :256 couleurs, mais seulement 16 s'affichent correctement.
Ensuite, en changeant le profil du terminal, ces 16 couleurs changent également.
D'autres tests suivent.
De gauche à droite, de haut en bas, nous avons Solarisé thème de couleur, dircolor
ansi-dark
et 256dark
, puis par défaut (Tango ) jeu de couleurs, dircolor
ansi-dark
et 256dark
.
Observation :en théorie le dircolor
ansi-dark
sur Solarisé le jeu de couleurs doit correspondre étroitement au dircolor
256dark
. Cela ne se produit pas clairement pour les fichiers répertoriés spécifiques. Au lieu de cela, cela se produit lorsque le répertoire de travail contient des dossiers , fichiers texte et liens symboliques . Conclusion :aucune attention particulière n'a été portée lors de l'encodage du 256dark
couleurs.
Conclusions préliminaires
xterm
prend en charge 256 couleurs, malgré les tput colors
dit. Les programmes peuvent se référer au ansi
palette (personnalisable par l'utilisateur) ou définir ses couleurs en choisissant parmi un total de 256 couleurs.
Réponse acceptée :
Vous trouverez des informations sur la prise en charge de 256 couleurs dans la FAQ tmux.
En relation :Liste des shells prenant en charge le mot-clé `local` pour définir les variables locales ?Détecter le nombre de couleurs que le terminal prend en charge n'est malheureusement pas simple, pour des raisons historiques. Voir Vérification du nombre de couleurs prises en charge par mon émulateur de terminal pour une explication. Cela signifie que
- tmux ne peut pas déterminer de manière fiable si le terminal prend en charge plus de 8 couleurs ;
- tmux ne peut pas communiquer de manière fiable à l'application qu'il prend en charge plus de 8 couleurs.
Lorsque vous êtes dans tmux, le terminal avec lequel vous interagissez est tmux. Il ne prend pas en charge toutes les séquences de contrôle de xterm. En particulier, il ne supporte pas le OSC 4 ; …
séquence de contrôle pour interroger ou définir des valeurs de couleur. Vous devez l'utiliser lors de l'exécution directe dans xterm, en dehors de tmux.
Si vous exécutez tmux -2
, alors tmux démarre avec la prise en charge de 256 couleurs, même s'il ne pense pas que votre terminal prend en charge 256 couleurs (ce qui est assez courant).
Par défaut, tmux s'annonce comme screen
sans prise en charge de 256 couleurs. Vous pouvez modifier la valeur de TERM
dans .tmux.conf
pour indiquer la prise en charge de 256 couleurs :
set -g default-terminal "screen-256color"
Vous pouvez utiliser TERM=xterm-256color
ou TERM=screen-256color
sur Ubuntu. Ces valeurs ne causeront des problèmes que si vous vous connectez à une machine distante qui n'a pas d'entrée termcap/terminfo pour ces noms. Vous pouvez copier les entrées dans votre répertoire personnel sur la machine distante ; cela fonctionne avec la plupart des implémentations terminfo modernes.
# From the Ubuntu machine to a machine that doesn't have *-256color terminfo entries
ssh somewhere.example.com mkdir -p .terminfo/s .terminfo/x
scp -p /lib/terminfo/s/screen-256color somewhere.example.com:.terminfo/s/
scp -p /lib/terminfo/x/xterm-256color somewhere.example.com:.terminfo/x/