Когда уместно использовать цвет в приложении командной строки?

14

В настоящее время у меня есть приложение командной строки в C под названием btcwatch. У него есть -Cопция, которую он может получить в качестве аргумента, который сравнивает текущую цену Биткойна с ценой, которая была сохранена заранее -S. Пример вывода с этой опцией:

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

Дилемма заключается в том, использовать ли цвет для строки UPили DOWN(зеленый и красный, соответственно). Большинство приложений командной строки, о которых я знаю (кроме git), держатся подальше от цвета при выводе. В моем стремлении btcwatchвыглядеть и быть достаточно «стандартным» (использование getoptMake-файлов и т. Д.), Я не уверен, будет ли цвет выглядеть неуместным в этой ситуации.

Марко Сканнадинари
источник
У мерзавца есть цвет на выходе? Разве я еще не сталкивался с конкретными командами, которые делают это?
Изката
Великолепные ответы ниже. Но всегда помните о раскраске, что нетривиальная часть ваших пользователей не сможет различить разницу между красным и зеленым.
Росс Паттерсон
Izkata: git diff, git pullи т.д.
Marco Scannadinari
@marcoms У меня нет цветного вывода для меня. Я не сделал никаких специальных настроек, чтобы включить его.
Изката

Ответы:

21

Нужно сделать раскраску необязательной, по умолчанию отключить ее и управлять ею с помощью флага командной строки. Таким образом, люди, которым он не нравится или чей терминал не поддерживает его, не затрагиваются, люди, которым он нравится, могут его использовать, и люди, которым он действительно, действительно нравится, могут определить псевдоним или ярлык для предопределения опции. Все счастливы.

Килиан Фот
источник
5
Это функциональность ls( ls --colorопция необходима для его включения).
@MichaelT: правда? Я думаю, это зависит от дистрибутива, который вы используете. Вывод (почти) всегда имеет цвет, и я никогда не указываю --color.
FrustratedWithFormsDesigner
1
@FrustratedWithFormsDesigner BSD-аромат. /bin/lsявляется простым, /bin/ls -Gцветным (хотя, если в среде определен CLICOLOR, эта опция действует по умолчанию). В распределениях под влиянием gnu каждый видит --colorи связанные с ним переменные окружения.
1
Отличный ответ на вопрос «Должен ли цвет быть обязательным или нет», в меньшей степени - «когда это уместно» :)
Майкл Даррант
3
@FrustratedWithFormsDesigner В Ubuntu, например, alias ls='ls --color=auto'по умолчанию используется .bashrc(или, если это не так, то где-то около 8.04 он дает или берет год, и я только что перенес свой .bashrc по всем установкам)
Izkata
9

Я считаю целесообразным использовать цвет, когда:

  • Существуют «группы» элементов, а цветовые группы помогут визуально сгруппировать элементы.

  • Есть набор (ы) полей 'label: value', и вы хотите, чтобы метки (или значения) выделялись.

  • Есть элементы, которые могут быть показаны красным / зеленым цветом, например, стоп / ход, хорошо / плохо и т. Д.

  • Большая часть информации является справочной, но один ключевой элемент должен выделяться.

Майкл Даррант
источник
5

Еще одним важным фактором, который следует учитывать, является то, что раскраска, в зависимости от платформы, может добавлять escape-последовательности символов. Для сборок на этих платформах, если текущий / заданный по умолчанию режим предназначен для вывода цвета, обычно определяют, является ли вывод программы ТРУБКОЙ и цвет зачистки, если это так.

Это сделано для того, чтобы последовательности выхода цвета не отбрасывали последующие программы, которые читают его вывод.

Приет Кукрети
источник
Хорошая мысль, я полагаю, что реализация --colour(или --no-colour) варианта будет более дружественной к таким программам
Марко Сканнадинари