Testo a colors nelle applicazioni terminali in UNIX

Ho iniziato a scrivere un editor di testo terminale, qualcosa come i primi editor di testo per UNIX, come ad esempio vi. Il mio unico objective è quello di divertirmi, ma voglio essere in grado di mostrare il testo a colors, così posso avere l’evidenziazione della syntax per modificare il codice sorgente.

Come posso raggiungere questo objective? C’è qualche API POSIX speciale per questo, o devo usare ncurses? (Preferirei di no)

Qualche consiglio? Forse alcuni libri di testo sull’API UNIX?

Questo è un piccolo programma in C che illustra come utilizzare i codici colore:

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

Ecco un altro modo per farlo. Alcune persone preferiranno questo perché il codice è un po ‘più pulito (non ci sono %s un colore RESET per terminare la colorazione).

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

In questo modo, è facile fare qualcosa come:

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

Probabilmente vuoi i codici colore ANSI . La maggior parte dei terminali * nix li supporta.

Utilizzare sequenze di escape ANSI. Questo articolo contiene alcuni dettagli su di loro. Puoi usarli anche con printf .