У меня есть файл C, работающий в Linux. Он печатает некоторые строки красным цветом (неудачи), а некоторые - зеленым (проходит). Как и следовало ожидать, он использует escape-коды в операторах printf следующим образом:
#define BLACK "\033[22;30m"
#define GREEN "\033[22;31m"
printf(GREEN "this will show up green" BLACK "\n");
Если BLACK в конце не было, текст терминала будет оставаться зеленым для всего. Если вы его не поймали, это прекрасно для оконного окна с нечерным фоном, но в противном случае вы получите черное на черном. Нехорошо! Запуск программы имеет эту проблему, как и захват вывода в текстовом файле, а затем просмотр файла с помощью "больше" или "меньше".
Есть ли код для восстановления значений по умолчанию вместо указания цвета в конце инструкции printf? Это должно быть в C, но мне было бы интересно узнать о других подходах.
Update: Спасибо вам всем. Ваши ответы помогли мне найти еще более полезную информацию в других местах. Я обновил свои макросы следующим образом (примечание 31 для красного цвета, и я установил эту опечатку ниже):
#define RESET_COLOR "\e[m"
#define MAKE_GREEN "\e[32m"
printf(MAKE_GREEN "this will show up green" RESET_COLOR "\n");
Я нашел следующие ссылки полезными для понимания того, как работают эти коды:
http://www.phwinfo.com/forum/comp-unix-shell/450861-bash-shell-escapes-not-working-via-putty-ssh.html объясняет, что делают эти escape-последовательности, и использовать ncurses, если необходима переносимость.
http://www.linuxselfhelp.com/howtos/Bash-Prompt/Bash-Prompt-HOWTO-6.html
http://bluesock.org/~willg/dev/ansi.html показывает еще больше escape-последовательностей; полезно для получения большой картины