¿Cuándo es apropiado usar color en una aplicación de línea de comandos?

14

Actualmente tengo una aplicación de línea de comandos en C llamada btcwatch. Tiene una -Copción que puede recibir como argumento que compara el precio actual de Bitcoin con un precio almacenado de antemano -S. El resultado de ejemplo con esta opción es:

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

El dilema es si se debe usar el color para la cadena UPo DOWN(verde y rojo, respectivamente). La mayoría de las aplicaciones de línea de comandos que conozco (aparte de git) se mantienen alejadas del color en su salida. En mi deseo de btcwatchmirar y ser bastante "estándar" (uso de getoptMakefiles, etc.), no estoy seguro de si el color se vería fuera de lugar en esta situación.

Marco Scannadinari
fuente
git tiene color en su salida? ¿Todavía no me he encontrado con los comandos particulares que hacen eso?
Izkata
Grandes respuestas a continuación. Pero recuerde siempre que para colorear, una parte no trivial de sus usuarios no podrá distinguir la diferencia entre rojo y verde.
Ross Patterson el
Izkata: git diff, git pull, etc.
Marco Scannadinari
@marcoms Esos no tienen salida de color para mí. Sin embargo, no he hecho configuraciones especiales para habilitarlo.
Izkata

Respuestas:

21

Lo apropiado es hacer que el color sea opcional, predeterminado en "apagado" y controlarlo mediante un indicador de línea de comandos. De esa manera, las personas a las que no les gusta o cuyo terminal no lo admite no se ven afectadas, las personas que les gusta pueden usarlo y las personas que realmente les gusta pueden definir un alias o acceso directo para predefinir la opción. Todos están felices.

Kilian Foth
fuente
55
Esta es la funcionalidad de ls( ls --colorse requiere la opción para activarla).
@MichaelT: ¿En serio? Supongo que depende de la distribución que uses. La salida (casi) siempre tiene color y nunca especifico --color.
FrustratedWithFormsDesigner
1
@FrustratedWithFormsDesigner BSD sabor. /bin/lses simple, /bin/ls -Gestá coloreado (aunque si tiene CLICOLOR definido en el entorno, esa opción actúa de manera predeterminada). En las distribuciones influenciadas por GNU , uno ve --colory sus variables de entorno asociadas.
1
Gran respuesta a "Debería ser obligatorio o no el color", menos para "cuándo es apropiado" :)
Michael Durrant
3
@FrustratedWithFormsDesigner En ubuntu, por ejemplo, alias ls='ls --color=auto'viene por defecto .bashrc(o si ya no lo hace, lo hizo alrededor de 8.04 más o menos un año, y acabo de llevar mi .bashrc a través de las instalaciones)
Izkata
9

Consideraría apropiado usar color cuando:

  • Hay "grupos" de elementos y los grupos de colores ayudarán a agrupar visualmente los elementos.

  • Hay conjuntos de campos 'etiqueta: valor' y desea que las etiquetas (o valores) se destaquen.

  • Hay elementos que se beneficiarían de mostrarse en rojo / verde, por ejemplo, detener / avanzar, bueno / malo, etc.

  • La mayor parte de la información es de fondo, pero un elemento clave debe destacarse.

Michael Durrant
fuente
5

Otro factor importante a considerar es que la coloración, dependiendo de la plataforma, puede agregar secuencias de escape de caracteres. Para compilaciones en esas plataformas, si el modo actual / predeterminado es generar color, es habitual detectar si la salida del programa es un TUBO y eliminar el color si ese es el caso.

Esto es para que las secuencias de escape de color no arrojen programas posteriores que leen su salida.

Preet Kukreti
fuente
buen punto, supongo que implementar una --colour(o --no-colour) opción será más amigable con dichos programas
Marco Scannadinari