introduction
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 une boîte Ubuntu , Guake , tmux , Vim et j'adore le thème Solarized . Ils avaient l'air affreux, alors j'ai décidé d'activer le support des 256 couleurs et de jouer un peu.
Voyons ce qui se passe pour mon terminal . tput colors
dit il y a 8 couleurs. Personnellement, je les ai mis en violet, à gauche, et bien sûr à droite, nous avons 2 nuances de bleu. $TERM
dit xterm
. (Pour avoir la couleur ls
je eval
ceci dans mon .bashrc
.)
Vim a également l’air très bien, malgré le fait que je l’appelle avec le 256
drapeau dans un environnement où 256 couleurs ne sont pas supportées.
set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized
Le seul gars qui se plaint de l'espace de couleur réduit est tmux . L'appel tmux
donne les "mauvais" résultats attendus.
Mais appeler tmux
avec le -2
drapeau fait que tout fonctionne correctement, comme par magie .
Maintenant, la seule chose que je comprends, c’est l’ -2
équivalent de 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 cela ne devrait pas?
- Suis-je sadique que je me plains pourquoi les choses fonctionnent? Peut être.
- Y a-t-il une meilleure raison? Bien sûr: j'aimerais corriger l'apparence des autres boîtiers Ubuntu dans mon bureau et comprendre pourquoi les choses fonctionnent ou ne fonctionnent pas.
Expériences supplémentaires
L'exécution de ce script (légèrement modifié) sur my xterm
donne le résultat suivant: 256 couleurs, mais seulement 16 sont affichées correctement.
Ensuite, en changeant le profil du terminal, ces 16 couleurs changent également.
Plus de tests suivent.
De gauche à droite, de haut en bas, nous avons solarisée thème de la couleur, dircolor
ansi-dark
et 256dark
, puis par défaut ( Tango schéma de couleurs), dircolor
ansi-dark
et 256dark
.
Observation : en théorie, la palette de couleurs dircolor
ansi-dark
sur Solarized devrait correspondre étroitement à la dircolor
256dark
. Cela ne se produit pas clairement pour les fichiers listés spécifiques. Cela se produit plutôt lorsque, dans le répertoire de travail, il y a des dossiers , des fichiers texte et des liens symboliques . Conclusion : peu d'attention a été portée lors du codage des 256dark
couleurs.
Conclusions préliminaires
xterm
supporte 256 couleurs, malgré ce que tput colors
dit. Les programmes peuvent faire référence à la ansi
palette (personnalisable par l'utilisateur) ou définir leurs couleurs, en choisissant parmi un total de 256 couleurs.
tput colors
test n'est pas fiable. Pourriez-vous vérifier mes conclusions préliminaires ?tput colors
ne peut renvoyer qu’une valeur et que dans les terminaux prenant en charge l’une quelconque des couleurs 2,8,16,88 ou 256 couleurs, seule la première valeur (8 dans votre cas) est renvoyée. Pour obtenir la vraie valeur, utilisez le script de mon dernier commentaire. Qu'est-ce que cela retourne?Réponses:
Il y a quelques informations sur le support 256 couleurs dans la FAQ de tmux .
Détecter le nombre de couleurs supportées par le terminal 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 obtenir une explication. Cela signifie que
Lorsque vous êtes dans tmux, le terminal avec lequel vous interagissez est tmux. Il ne supporte pas toutes les séquences de contrôle de xterm. En particulier, il ne prend pas en charge la
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
, tmux commence par prendre en charge 256 couleurs, même s'il ne pense pas que votre terminal prenne en charge 256 couleurs (ce qui est assez courant).Par défaut, tmux s'annonce comme
screen
sans support 256 couleurs. Vous pouvez modifier la valeur deTERM
in.tmux.conf
pour indiquer la prise en charge 256 couleurs:Vous pouvez utiliser
TERM=xterm-256color
ouTERM=screen-256color
sur Ubuntu. Ces valeurs ne poseront problème que si vous vous connectez à une machine distante ne disposant pas d'une 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 les implémentations les plus modernes de terminfo.la source
xterm
été capable de me montrer 256 couleurs alorstput colors
que je disais 8. Je suppose que la réponse à cette question spécifique a été abordée par @terdon dans ses commentaires sur la question elle-même.set -g default_terminal "screen-256color"
commande n'est pas suffisante pour activer les 256 couleurs dans tmux . Vous devezalias tmux='export TERM=screen-256color; /usr/bin/tmux'
( référence ).tmux -2
conformément au paragraphe précédent, si tmux ne pense pas que votre terminal actuel prend en charge 256 couleurs, celaalias tmux='tmux -2'
aurait donc un sens.TERM=xterm-256color tmux
, ce qui est raisonnable, contrairement àTERM=screen-256color tmux
.tmux -2
est supérieur parce que cela fonctionne même s'ilscreen-256color
ne se trouve pas dans la base de données terminfo locale.Je suis impressionné par la richesse de la mise en forme et de la précision des réponses (et de la question!). Bien qu'ils fournissent des informations précieuses et des solutions sur les outils que vous avez mentionnés, ils fournissent très peu d'informations sur ce qui se passe , et, plus important encore, sur la raison pour laquelle les choses fonctionnent (un peu) pour certains outils alors qu'ils ne devraient pas le faire.
Alors voici quelques idées sur vos questions fondamentales:
Qu'est-ce qu'un terminal prend en charge et ce qu'il rapporte sont des choses différentes. Le terminal Gnome par exemple est capable d’afficher 256 couleurs, mais il s’annonce à l’environnement (via
$TERM
variable) en tantxterm
qu’émulateur (8 couleurs).Des outils tels que
tput
suit tout ce quiTERM
est défini sur:tput colors
peut imprimer 8, alors queenv TERM=xterm-256color tput colors
256 en seront, indépendamment du fait que votre terminal prenne réellement en charge de telles capacitésvim
suivez égalementTERM
par défaut, mais comme vous lui avez dit d’utiliser 256 couleurs (via le drapeau ou leset t_Co=256
), il utilisera 256 couleurs. Et cela fonctionne parce que votre terminal le supporte réellement .tmux
, tout comme Gnome Terminal, se présente également par défaut comme un terminal 8 couleurs. Mais contrairement à Gnome Terminal, il ne reste que fonctionnalité 256 couleurs que si vous utilisez l'-2
indicateur, ce qui lui permet également de se signaler en tantxterm-256color
qu'émulateur compatible.xterm
, comme dans le logiciel d'émulateur de terminal pour le X11 , supporte 256 couleurs, bien sûr. Maisxterm
comme dansTERM=xterm
est un "standard" de 8 couleurs. Cela signifie les capacités de l' originalxterm
. Lorsqu'il a été mis à niveau pour prendre en charge 256 couleurs, il y a longtemps, il a inventé cexterm-256color
terme.Donc tout se résume à:
Quelles sont les fonctionnalités actuellement prises en charge par votre terminal (et activées pour ce faire)
Comment il signale de telles capacités à l'environnement via
TERM
Comment les outils s'interprètent
TERM
et s'adaptent en conséquence.Comme vous pouvez le déduire de ce qui précède, évitez de marteler
export TERM=xterm-256color
vos~/.bashrc
scripts . Comme ces fichiers sont exécutés quel que soit le terminal que vous utilisez réellement, tous les vos terminaux, y compris les connexions distantes de Windows avec Putty, les terminaux de console Linux, etc., se présenteront comme compatibles xterm-256color. Ce qui peut être vrai pour certains mais certainement pas pour tous. Par exemple,getty
la console Linux à laquelle vous accédezCTRL+ALT+1..6
n’a pas.Les terminaux doivent se déclarer comme étant le "standard" avec lequel ils sont le plus compatibles. Si vous savez qu'ils peuvent gérer 256 couleurs, configurez-les pour qu'ils annoncent en tant que telles.
Dernier point mais non le moindre, une lecture étonnante à propos de
TERM
256 couleurs est:http://blog.sanctum.geek.nz/term-strings/
http://blog.sanctum.geek.nz/256-colour-terminals/
la source
Je fournirai une réponse complémentaire qui ne concerne que vos expériences supplémentaires dans la mesure où elles concernent les couleurs de répertoire solarisées .
Installer
Nous avons la même couleur de sortie du script de test. La seule différence est que j'ai utilisé
lxterminal
sur Openbox avec slim , xcompmgr et sans DM. Par conséquent, je ne peux pas facilement définir une palette personnalisée, comme vous l'avez fait, car l'émulateur de terminal ne propose pas ces paramètres dans une interface graphique et ne contient pas de thème spécifique (ceux-ci n'existent que pour quelques émulateurs de terminal). Donc, je viens d'utiliser des terminaux translucides, non décorés et ce bleu comme couleur de premier plan avec un fond Gentoo bleu . Depuis que je ne peux pas utiliser le ansi versions des fichiers couleur, je me suis concentré exclusivement sur l'obtention de résultats,dircolors.256dark
c'est- à- dire avec la version simple "dégradée".J'ai utilisé la configuration pertinente suivante et la police inconsolata medium:
Dircolors
L'image ci-dessous montre ce qui se passe à l'intérieur et à l'extérieur de tmux avec ces paramètres. Le premier tiers à gauche montre des fenêtres lxterminales non décorées empilées verticalement (3). A droite, vous avez un assemblage tmux montrant les mêmes programmes identiques (3). J'ai également inclus un 1 solarisé montrant nano en utilisant le fichier .Xresources inclus dans le package complet (et en l'échantillonnant avec ):
xterm
xrdb -load ~/.Xresources
s'il vous plaît clic droit / voir l'image pour inspecter en pleine résolution
Le premier terminal dans le coin supérieur gauche présente les couleurs de répertoire par défaut. Juste en dessous se trouve la version solarisée dégradée . À l'exception du fond rose sur fond bleu pour les
.c
fichiers que j'ai ajoutés, il est identique à celui attendu (voir l'image ci-dessous pour référence). Par rapport aux valeurs par défaut, il s'appuie davantage sur les attributs étendus, à savoir gras / clair / inverse, etc., et les couleurs sont évidemment différentes. L'attribution des couleurs par défaut pour les.txt
fichiers de nombreuses distributions est le vert, mais elle devrait être grise au lieu de la solaire . Un fichier ansi qui rend un fichier .txt en vert ne rend pas le rendu correctement ou ne le rend pas du tout. Les résultats du côté droit que vous avez indiqués sont les bons (256dark) par rapport à la référence suivante:carte de référence des dircolors solarisés "dégradés"
Observations
Avec la configuration que j'ai utilisée, les résultats semblent identiques à l'intérieur et à l'extérieur de tmux (j'ai inversé les commentaires (#) dans vi mais sinon, le plugin se comporte comme il se doit et le multiplexeur n'a aucun impact sur cela). Les polices jouent un rôle important dans la définition des fonctionnalités solarisées et une bonne police est nécessaire pour optimiser l'expérience. Les couleurs de répertoire solarisées utilisant le fichier 256dark correspondent à la référence et ne nécessitent aucune configuration d'émulateur de terminal spécifique.
Conclusion
En fait , le ansi rendu des couleurs du répertoire est juste complètement différent de avilis solarisée (256dark). À tel point que les fichiers sous ansi
.txt
sont verts. L'un ne peut pas être utilisé pour valider le rendu de l'autre. Les deux solutions nécessitent une configuration différente et produisent des résultats totalement différents.la source
ansi-dark
sortie soit correcte (car elle utilise la version non dégradée). Ensuite, si vous prenez comme référence la sortie du256dark
, alors vous avez la mentalité inversée.