C код изменяет цвет текста терминала; как восстановить значения по умолчанию? Linux

17

У меня есть файл C, работающий в Linux. Он печатает некоторые строки красным цветом (неудачи), а некоторые - зеленым (проходит). Как и следовало ожидать, он использует escape-коды в операторах printf следующим образом:

#define BLACK  "3[22;30m"
#define GREEN  "3[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");

Я нашел следующие ссылки полезными для понимания того, как работают эти коды:

Ссылка объясняет, что делают эти escape-последовательности, и использовать ncurses, если необходима переносимость.

Ссылка

Ссылка показывает еще больше escape-последовательностей; полезно для получения большой картины

    
задан jasper77 17.08.2010 в 22:07
источник

3 ответа

21

Попробуйте использовать:

#define RESETCOLOR "3[0m"

Это должно привести к сбросу настроек по умолчанию.

Подробнее об этих терминальных кодах можно найти здесь: Ссылка

    
ответ дан Frxstrem 17.08.2010 в 22:12
4
"3[0m"

Смотрите здесь: Ссылка

    
ответ дан adamk 17.08.2010 в 22:12
  • Спасибо за ссылку. –  CSharper 10.05.2012 в 10:29
2

введите reset в терминал.

В Linux есть двоичный файл, и OSX называется сбросом.

    
ответ дан Nils 17.08.2010 в 22:15
  • Хорошо не точный ответ, но, возможно, смотреть на него помогает. –  Nils 17.08.2010 в 22:16
  • «reset» вытирает окно терминала и помещает подсказку в верхнюю часть экрана, что не является нужным мне эффектом, но спасибо. –  jasper77 18.08.2010 в 17:11