Ответ 1
Вероятно, самый простой способ проверить:
isatty(fileno(STDOUT))
Это вернет 1
, если ваш стандартный вывод будет отправлен на любой терминал. На практике любой терминал будет поддерживать или игнорировать цветовые коды VT100; рассмотрение terminfo не требуется, если вы не ожидаете вывода на некоторые действительно необычные аппаратные терминалы. (Большинство из них не были сделаны за последние десятилетия.)
Для вывода цветов используйте (расширенную) последовательность SGR:
"\x1b[%dm"
где %d
- одно из следующих значений для широко поддерживаемых цветов:
0: reset colors/style
1: bold
4: underline
30 - 37: black, red, green, yellow, blue, magenta, cyan, and white text
40 - 47: black, red, green, yellow, blue, magenta, cyan, and white background
Есть больше значений, но они наиболее широко поддерживаются. Опять же, рассмотрение terminfo в большинстве случаев не является необходимым для этих управляющих кодов, поскольку каждый программный терминал, стоящий на его соли, будет поддерживать (или игнорировать) их.
Если вам нужно изменить сразу несколько атрибутов, вы можете указать их все сразу, разделенные точками с запятой. Например, следующая последовательность будет искажать ваши глазные яблоки жирным шрифтом пурпурного цвета на зеленом фоне:
"\x1b[1;35;42m"