Цветной текст в терминальных приложениях в UNIX
Я начал писать текстовый редактор терминала, что-то вроде первых текстовых редакторов для UNIX, таких как vi. Моя единственная цель - хорошо провести время, но я хочу показать текст в цвете, поэтому я могу выделить синтаксис для редактирования исходного кода.
Как я могу это достичь? Есть ли какой-то специальный POSIX API для этого, или мне нужно использовать ncurses? (Я бы предпочел не)
Любые советы? Может быть, некоторые учебники по UNIX API?
Ответы
Ответ 1
Это небольшая программа на C, которая иллюстрирует, как вы можете использовать цветовые коды:
#include <stdio.h>
#define KNRM "\x1B[0m"
#define KRED "\x1B[31m"
#define KGRN "\x1B[32m"
#define KYEL "\x1B[33m"
#define KBLU "\x1B[34m"
#define KMAG "\x1B[35m"
#define KCYN "\x1B[36m"
#define KWHT "\x1B[37m"
int main()
{
printf("%sred\n", KRED);
printf("%sgreen\n", KGRN);
printf("%syellow\n", KYEL);
printf("%sblue\n", KBLU);
printf("%smagenta\n", KMAG);
printf("%scyan\n", KCYN);
printf("%swhite\n", KWHT);
printf("%snormal\n", KNRM);
return 0;
}
Ответ 2
Вот еще один способ сделать это. Некоторые люди предпочтут это, так как код немного чище (нет цвета %s
и RESET
, чтобы закончить окраску).
#include <stdio.h>
#define RED "\x1B[31m"
#define GRN "\x1B[32m"
#define YEL "\x1B[33m"
#define BLU "\x1B[34m"
#define MAG "\x1B[35m"
#define CYN "\x1B[36m"
#define WHT "\x1B[37m"
#define RESET "\x1B[0m"
int main()
{
printf(RED "red\n" RESET);
printf(GRN "green\n" RESET);
printf(YEL "yellow\n" RESET);
printf(BLU "blue\n" RESET);
printf(MAG "magenta\n" RESET);
printf(CYN "cyan\n" RESET);
printf(WHT "white\n" RESET);
return 0;
}
Таким образом, легко сделать что-то вроде:
printf("This is " RED "red" RESET " and this is " BLU "blue" RESET "\n");
Ответ 3
Вероятно, вы хотите цветовые коды ANSI. Большинство терминалов * nix поддерживают их.
Ответ 4
Используйте escape-последовательности ANSI. В этой статье мы подробно расскажем о них. Вы также можете использовать их с помощью printf
.