Je veux savoir s'il existe un moyen de vérifier si mon programme peut générer une sortie de terminal en utilisant des couleurs ou non.
Exécuter des commandes telles less
que regarder et regarder la sortie d’un programme qui sort en couleurs, la sortie est mal affichée, comme
[ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m]
Merci
Réponses:
Dans quelle langue écrivez-vous votre candidature?
L'approche normale consiste à vérifier si le périphérique de sortie est un terminal, et si c'est le cas, vérifiez si ce type de terminal prend en charge les couleurs.
Dans
bash
, cela ressemblerait àEn C, vous devez taper beaucoup plus, mais vous pouvez obtenir le même résultat avec isatty et les fonctions listées dans
man 3 terminfo
.la source
Cela devrait suffire:
tput couleurs a expliqué:
Si vous regardez la page de manuel, vous remarquerez ceci:
Et...
Termcap se
colors
trouve dans la base de données terminfo, vous pouvez donc le demander. Si vous avez un statut de sortie nul, alors termcap est compilé. Mais si vous avez quelque chose comme:Cela montre que unknowntermcap n'existe pas. Donc ça:
Montre que votre commande avait raison.
Autres moyens utiles:
À votre santé
la source
colors
n’est pas documenté dans latput
page de manuel (!), devrais-je donc rechercher un nombre> = 8 dans stdout ou un code retour égal à 0?colors
capacité est documentée dans terminfo (5) . Test en utilisanttput -T dumb colors
,tput -T vt220 colors
,tput -T linux colors
,tput -T xterm colors
suggère des valeurs communes sont-1
(pas de support de couleur) et8
(8 couleurs). Notez que cela ne s'applique qu'après avoir vérifié que le périphérique de sortie est un terminal (par exemple[ -t 1 ]
ouisatty
).tput colors
renvoie ce que la base de données du terminal local pense du terminal. Cela peut correspondre ou non à ce que le terminal peut réellement faire, en particulier pour un type de terminal similaire àxterm
celui proposé dans de nombreuses variantes (allant du noir et blanc à 256 couleurs).Dans ce cas d'utilisation, ce que font généralement les programmes (par exemple, GNU ls ou GNU grep avec
--color=auto
), consiste à utiliser des couleurs si leur sortie est dirigée vers un terminal, et aucune couleur sinon. Les terminaux qui ne prennent pas en charge les séquences de changement de couleur ANSI sont suffisamment rares pour que leurs utilisateurs puissent remplacer le choix par défaut. Dans tous les cas, assurez-vous que votre application dispose d'une option pour forcer l'activation ou la désactivation des couleurs.Dans un script shell, utilisez
[ -t 1 ]
pour tester si la sortie standard est un terminal.Depuis un programme utilisant l’API C, appelez
isatty(1)
.la source
Essayez d'utiliser
less --RAW-CONTROL-CHARS
.Dans cet exemple, j'utilise logtool , qui imprime la sortie en couleurs.
Sans --RAW-CONTROL-CHARS:
Avec --RAW-CONTROL-CHAR (imaginez que ce soit dans de jolies couleurs. De plus, je ne suis pas sûr de savoir pourquoi cela
^G
est affiché.):la source
Ce serait la faute de
less
ne pas être configuré pour interpréter les fuites ANSI; chercherR
dans$LESSOPTS
. Pour déterminer si le système sait que votre terminal peut gérer les couleurs,tput colors
il affichera le nombre de couleurs qu’il prend en charge ou-1
non. (Notez que certains terminaux peuvent utiliserxterm
au lieu dexterm-color
comme description de terminal, mais prennent toujours en charge les couleurs.)la source
Si vous souhaitez ajouter de la couleur à la sortie mais uniquement lorsque les couleurs sont prises en charge, vous pouvez simplement l'utiliser
tput
. http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.htmlla source