Как я печатаю окрашенные символы к терминалу Linux, который поддерживает его?
Как я говорю, поддерживает ли терминал цветовые коды?
Вам нужно вывести цветовые коды ANSI. Обратите внимание, что не все терминалы поддерживают это; если цветовые последовательности не поддерживаются, будет выводиться мусор.
Пример:
cout << "\033[1;31mbold red text\033[0m\n";
Здесь, \033
- это символ ESC, ASCII 27. За ним следует [
, затем ноль или более чисел, разделенных ;
, и, наконец, буква м
. Цифры описывают цвет и формат, на который следует переключиться с этого момента.
Коды цветов переднего плана и фона:
foreground background
black 30 40
red 31 41
green 32 42
yellow 33 43
blue 34 44
magenta 35 45
cyan 36 46
white 37 47
Кроме того, вы можете использовать следующие:
reset 0 (everything back to normal)
bold/bright 1 (often a brighter shade of the same colour)
underline 4
inverse 7 (swap foreground and background colours)
bold/bright off 21
underline off 24
inverse off 27
Другие, менее широко поддерживаемые коды см. в таблице в Википедии.
Чтобы определить, поддерживает ли ваш терминал цветовые последовательности, прочитайте значение переменной окружения TERM
. В ней должен быть указан конкретный тип используемого терминала (например, vt100
, gnome-terminal
, xterm
, screen
, ...). Затем посмотрите это в базе данных terminfo; проверьте возможность colors
.
Вы можете использовать escape-последовательности, если ваш терминал это поддерживает. Например:
echo \[\033[32m\]Hello, \[\033[36m\]colourful \[\033[33mworld!\033[0m\]
Лучше всего использовать библиотеку ncurses - хотя это может быть кувалдой, чтобы сломать орех, если вы просто хотите вывести простую цветную строку