Texto de color en aplicaciones de terminal en UNIX

Empecé a escribir un editor de texto de terminal, algo así como los primeros editores de texto para UNIX, como vi. Mi único objective es pasar un buen rato, pero quiero poder mostrar el texto en color, para que pueda resaltar la syntax para editar el código fuente.

¿Cómo puedo conseguir esto? ¿Hay alguna API POSIX especial para esto, o tengo que usar ncurses? (Preferiría no)

¿Algún consejo? Tal vez algunos libros de texto en la API de UNIX?

Este es un pequeño progtwig de C que ilustra cómo podría usar los códigos de color:

#include  #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; } 

Aquí hay otra manera de hacerlo. Algunas personas preferirán esto ya que el código es un poco más limpio (no hay %s y un color RESET para finalizar la coloración).

 #include  #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; } 

De esta manera, es fácil hacer algo como:

 printf("This is " RED "red" RESET " and this is " BLU "blue" RESET "\n"); 

Probablemente desee códigos de color ANSI . La mayoría de los terminales * nix los admiten.

Use secuencias de escape ANSI. Este artículo entra en detalles sobre ellos. Puedes usarlos con printf también.