web-dev-qa-db-fra.com

Couleur du texte dans les applications de terminal sous UNIX

J'ai commencé à écrire un éditeur de texte terminal, un peu comme les premiers éditeurs de texte pour UNIX, tels que vi. Mon seul objectif est de passer du bon temps, mais je veux pouvoir afficher le texte en couleur pour pouvoir mettre en surbrillance la syntaxe lors de l'édition du code source.

Comment puis-je atteindre cet objectif? Existe-t-il une API POSIX spéciale ou dois-je utiliser ncurses? (Je ne préfère pas)

Aucun conseil? Peut-être que certains manuels sur l'API UNIX?

100
Nisanio

Ceci est un petit programme en C qui illustre comment utiliser les codes de couleur:

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

Voici une autre façon de le faire. Certaines personnes préféreront cela car le code est un peu plus propre (il n'y a pas de %s et une couleur RESET pour terminer la coloration).

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

De cette façon, il est facile de faire quelque chose comme:

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

Vous voulez probablement codes de couleur ANSI . La plupart des terminaux * nix les prennent en charge.

18
nmichaels

Utilisez des séquences d'échappement ANSI. Cet article entre dans quelques détails à leur sujet. Vous pouvez également les utiliser avec printf.

15
Vivin Paliath