Как я могу печатать на консоль в цвете кросс-платформенным способом?
Как я могу выводить цветной текст с помощью "printf" на Mac OS X и Linux?
Ответы
Ответ 1
Вы можете использовать цветовые коды ANSI. Вот пример программы:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("%c[1;31mHello, world!\n", 27); // red
printf("%c[1;32mHello, world!\n", 27); // green
printf("%c[1;33mHello, world!\n", 27); // yellow
printf("%c[1;34mHello, world!\n", 27); // blue
return 0;
}
27
- символ escape
. Вы можете использовать \e
, если хотите.
Есть списки всех кодов по всему Интернету. Вот один.
Ответ 2
Другой вариант:
# Define some colors first (you can put this in your .bashrc file):
red='\e[0;31m'
RED='\e[1;31m'
blue='\e[0;34m'
BLUE='\e[1;34m'
cyan='\e[0;36m'
CYAN='\e[1;36m'
green='\e[0;32m'
GREEN='\e[1;32m'
yellow='\e[0;33m'
YELLOW='\e[1;33m'
NC='\e[0m'
#################
Затем вы можете ввести терминал:
echo -e "${RED}This is an error${NC}"
echo -e "${YELLOW}This is a warning${NC}"
echo -e "${GREEN}Everythings fine!${NC}"
Не забывайте, что ${NC} в конце. NC означает "нет цвета", а это означает, что после вашего предложения он вернется к нормальному цвету. Если вы забудете об этом, все приглашение и команды впоследствии будут в указанном вами цвете (конечно, вы можете ввести "echo -e" ${NS} "', чтобы изменить его).
Ответ 3
Для лучшей переносимости запросите базу данных terminfo. В оболочке
colors=(black red green yellow blue magenta cyan white)
for ((i = 0; i < ${#colors[*]}; i++)); do
((j=(i+1)%${#colors[*]}))
printf '%s%s%s on %s%s\n' "$(tput setaf $i)" "$(tput setab $j)" \
"${colors[i]}" "${colors[j]}" "$(tput op)"
done
распечатает
black on red
red on green
green on yellow
yellow on blue
blue on magenta
magenta on cyan
cyan on white
white on black
но в цвете.