我开始编写一个终端文本编辑器,类似于 UNIX 的第一个文本编辑器,比如 vi。我唯一的目标就是玩得开心,但是我希望能够用彩色显示文本,这样我就可以有编辑源代码的语法突显。
我怎么才能做到呢?是否有一些特殊的 POSIX API,或者我必须使用 ncurses?(我宁愿不要)
有什么建议吗? 也许是一些关于 UNIX API 的教科书?
使用 ANSI 转义序列。 这篇文章会详细介绍它们。你也可以把它们和 printf一起使用。
printf
您可能需要 ANSI color codes。大多数 * nix 终端都支持它们。
这是一个小小的 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; }
还有一个办法。有些人会更喜欢这样,因为代码比较干净。没有 %s和 RESET颜色结束的颜色。
%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");
这一行产生以下输出: