Quando é apropriado usar cores em um aplicativo de linha de comando?

14

Atualmente, tenho um aplicativo de linha de comando em C chamado btcwatch. Tem uma -Copção que pode receber como argumento que compara o preço atual do Bitcoin com um preço que foi previamente armazenado -S. Exemplo de saída com esta opção é:

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

O dilema é se deve usar cor para a UPou DOWNstring (verde e vermelho, respectivamente). A maioria dos aplicativos de linha de comando que eu conheço (além do git) fica longe da cor na saída. No meu desejo de btcwatchparecer e ser bastante "padrão" (uso de getoptMakefiles, etc), não tenho certeza se a cor ficaria fora de lugar nessa situação.

Marco Scannadinari
fonte
git tem cor em sua saída? Ainda não corri os comandos específicos que fazem isso?
Izkata
Ótimas respostas abaixo. Mas lembre-se sempre de colorir que uma parte não trivial de seus usuários não será capaz de distinguir a diferença entre vermelho e verde.
Ross Patterson
Izkata: git diff, git pull, etc.
Marco Scannadinari
@ marcoms Aqueles não têm saída em cores para mim. Eu não fiz configurações especiais para habilitá-lo, no entanto.
achou

Respostas:

21

A coisa apropriada a fazer é tornar a coloração opcional, o padrão é "off" e controlá-la através de um sinalizador da linha de comando. Dessa forma, pessoas que não gostam ou cujo terminal não o suporta não são afetadas, pessoas que gostam dele podem usá-lo e pessoas que realmente gostam podem definir um alias ou atalho para predefinir a opção. Todo mundo está feliz.

Kilian Foth
fonte
5
Essa é a funcionalidade de ls(a ls --coloropção é necessária para ativá-la).
@MichaelT: Sério? Eu acho que depende da distribuição que você usa. A saída (quase) sempre tem cores e eu nunca especifico --color.
FrustratedWithFormsDesigner
1
@FrustratedWithFormsDesigner Sabor BSD. /bin/lsé simples, /bin/ls -Gé colorido (embora, se você tiver o CLICOLOR definido no ambiente, essa opção atue como padrão). Nas distribuições influenciadas pelo gnu , vê-se --colore suas variáveis ​​de ambiente associadas.
1
Grande resposta a "cor deve ser obrigatório ou não", menos para "Quando é apropriado" :)
Michael Durrant
3
@FrustratedWithFormsDesigner No ubuntu, por exemplo, alias ls='ls --color=auto'vem o padrão .bashrc(ou, se não existir mais, ocorreu algo em torno de 8,04 ou mais por ano, e eu acabei de carregar meu .bashrc nas instalações)
Izkata
9

Eu consideraria apropriado usar cores quando:

  • Existem 'grupos' de itens e grupos de cores ajudarão a agrupar visualmente os itens.

  • Existem conjuntos de campos 'label: value' e você deseja que os rótulos (ou valores) se destaquem.

  • Existem itens que poderiam ser exibidos em vermelho / verde, por exemplo, parar / ir, bom / ruim, etc.

  • A maioria das informações é de segundo plano, mas um item importante deve se destacar.

Michael Durrant
fonte
5

Outro fator importante a considerar é que a coloração, dependendo da plataforma, pode adicionar seqüências de escape de caracteres. Para compilações nessas plataformas, se o modo atual / padrão é produzir cores, é habitual detectar se a saída do programa é uma tubulação e, se for o caso, uma cor de tira.

Isso ocorre para que as seqüências de escape de cores não atinjam os programas downstream que lêem sua saída.

Preet Kukreti
fonte
bom ponto, acho que a implementação de um --colour(ou --no-colour) opção será mais amigável para tais programas
Marco Scannadinari