C-код изменяет цвет текста терминала; как восстановить настройки по умолчанию? Linux - PullRequest
17 голосов
/ 18 августа 2010

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

#define BLACK  "\033[22;30m"
#define GREEN  "\033[22;31m"

printf(GREEN "this will show up green" BLACK "\n");

Если в конце не было ЧЕРНОГО, текст терминала будет оставаться зеленым для всего.В случае, если вы не уловили его, это нормально для окна терминала с не черным фоном, но в противном случае вы получите черный на черном.Нехорошо!При запуске программы возникает такая проблема, как при захвате вывода в текстовом файле и последующем просмотре файла с «большим» или «меньшим».

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

Обновление: Спасибо всем.Ваши ответы помогли мне найти еще более полезную информацию в другом месте.Я обновил свои макросы следующим образом (примечание 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-последовательностей;полезно получить большую картину

Ответы [ 3 ]

22 голосов
/ 18 августа 2010

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

#define RESETCOLOR "\033[0m"

Это должно сбросить его до значений по умолчанию.

Подробнее об этих кодах клемм можно найти здесь: http://en.wikipedia.org/wiki/ANSI_escape_code

4 голосов
/ 18 августа 2010
"\033[0m"

Смотрите здесь: http://en.wikipedia.org/wiki/ANSI_color

2 голосов
/ 18 августа 2010

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

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

...