UNIX中terminal应用程序中的颜色文本

我开始写一个terminal文本编辑器,就像UNIX的第一个文本编辑器,比如vi。 我唯一的目标是有一个美好的时光,但我希望能够以彩色显示文本,所以我可以有语法高亮编辑源代码。

我怎样才能做到这一点? 是否有一些特殊的POSIX API,或者我必须使用ncurses? (我宁愿不)

任何build议? 也许一些关于UNIX API的教科书?

这是一个小小的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; } 

这是另一种方法。 有些人会喜欢这个,因为代码更清洁一点(没有%sRESET颜色来结束着色)。

 #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"); 

您可能需要ANSI颜色代码 。 大多数* nixterminal支持他们。

使用ANSI转义序列。 这篇文章对他们进行了一些细节。 你也可以用printf来使用它们。