Quand est-il approprié d'utiliser la couleur dans une application en ligne de commande?

14

Actuellement, j'ai une application de ligne de commande en C appelée btcwatch. Il a une -Coption qu'il peut recevoir comme argument qui compare le prix actuel de Bitcoin avec un prix qui a été préalablement enregistré avec -S. Exemple de sortie avec cette option:

$ btcwatch -vC  # -v = verbose
buy: UP $ 32.000000 USD (100.000000 -> 132.000000)
sell: UP $ 16.000000 USD (100.000000 -> 116.000000)

Le dilemme est de savoir s'il faut utiliser la couleur pour la chaîne UPou DOWN(vert et rouge, respectivement). La plupart des applications en ligne de commande que je connais (à l'exception de git) restent éloignées de la couleur dans leur sortie. Dans mon désir btcwatchde regarder et d'être assez "standard" (utilisation de getopt, Makefiles, etc.), je ne sais pas si la couleur ne serait pas à sa place dans cette situation.

Marco Scannadinari
la source
git a de la couleur dans sa sortie? N'ai-je simplement pas encore exécuté les commandes particulières qui font cela?
Izkata
Excellentes réponses ci-dessous. Mais souvenez-vous toujours de la coloration qu'une partie non triviale de vos utilisateurs ne pourra pas distinguer la différence entre le rouge et le vert.
Ross Patterson
Izkata: git diff, git pull, etc.
Marco Scannadinari
@marcoms Ceux-là n'ont pas de sortie couleur pour moi. Je n'ai cependant fait aucune configuration spéciale pour l'activer.
Izkata

Réponses:

21

La chose appropriée à faire est de rendre la coloration facultative, par défaut à "off" et de la contrôler via un drapeau de ligne de commande. De cette façon, les personnes qui ne l'aiment pas ou dont le terminal ne la prend pas en charge ne sont pas affectées, les personnes qui l'aiment peuvent l'utiliser et les personnes qui l'aiment vraiment peuvent vraiment définir un alias ou un raccourci pour prédéfinir l'option. Tout le monde est content.

Kilian Foth
la source
5
Il s'agit de la fonctionnalité de ls(l' ls --coloroption est requise pour l'activer).
@MichaelT: Vraiment? Je suppose que cela dépend de la distribution que vous utilisez. La sortie a (presque) toujours de la couleur et je ne le précise jamais --color.
FrustratedWithFormsDesigner
1
@FrustratedWithFormsDesigner BSD saveur. /bin/lsest simple, /bin/ls -Gest coloré (bien que si CLICOLOR soit défini dans l'environnement, cette option agit par défaut sur). Dans les distributions influencées par GNU , on voit --coloret ses variables d'environnement associées.
1
Excellente réponse à "La couleur doit-elle être obligatoire ou non", moins pour "quand est-elle appropriée" :)
Michael Durrant
3
@FrustratedWithFormsDesigner Sur ubuntu, par exemple, alias ls='ls --color=auto'vient dans la valeur par défaut .bashrc(ou si ce n'est plus le cas, il a fait environ 8.04 donner ou prendre un an, et je viens de porter mon .bashrc à travers les installations)
Izkata
9

Je considérerais approprié d'utiliser la couleur lorsque:

  • Il existe des «groupes» d'articles et des groupes de couleurs aideront à regrouper visuellement les articles.

  • Il existe des ensembles de champs «étiquette: valeur» et vous voulez que les étiquettes (ou valeurs) se démarquent.

  • Il y a des éléments qui gagneraient à être affichés en rouge / vert, par exemple stop / go, bon / mauvais, etc.

  • La plupart des informations sont de fond, mais un élément clé doit ressortir.

Michael Durrant
la source
5

Un autre facteur important à considérer est que la coloration, selon la plate-forme, peut ajouter des séquences d'échappement de caractères. Pour les versions sur ces plates-formes, si le mode actuel / par défaut est de sortir la couleur, il est habituel de détecter si la sortie du programme est un TUYAU et de supprimer la couleur si c'est le cas.

C'est ainsi que les séquences d'échappement de couleur ne jettent pas les programmes en aval qui lisent sa sortie.

Preet Kukreti
la source
bon point, je suppose que la mise en œuvre d'une option --colour(ou --no-colour) sera plus conviviale pour de tels programmes
Marco Scannadinari