163 votes

stdlib et sortie colorée en C

Je réalise une application simple qui nécessite une sortie colorée. Comment puis-je rendre ma sortie colorée comme le font emacs et bash ?

Je ne me soucie pas de Windows, car mon application ne concerne que les systèmes UNIX.

359voto

Andrejs Cainikovs Points 7758

Tous les émulateurs de terminaux modernes utilisent des codes d'échappement ANSI pour afficher les couleurs et d'autres éléments.
Ne vous embêtez pas avec les bibliothèques, le code est vraiment simple.

Pour plus d'informations, voir ici .

Exemple en C :

#include <stdio.h>

#define ANSI_COLOR_RED     "\x1b[31m"
#define ANSI_COLOR_GREEN   "\x1b[32m"
#define ANSI_COLOR_YELLOW  "\x1b[33m"
#define ANSI_COLOR_BLUE    "\x1b[34m"
#define ANSI_COLOR_MAGENTA "\x1b[35m"
#define ANSI_COLOR_CYAN    "\x1b[36m"
#define ANSI_COLOR_RESET   "\x1b[0m"

int main (int argc, char const *argv[]) {

  printf(ANSI_COLOR_RED     "This text is RED!"     ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_GREEN   "This text is GREEN!"   ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_YELLOW  "This text is YELLOW!"  ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_BLUE    "This text is BLUE!"    ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_MAGENTA "This text is MAGENTA!" ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_CYAN    "This text is CYAN!"    ANSI_COLOR_RESET "\n");

  return 0;
}

15voto

La gestion des séquences de couleurs peut être compliquée et différents systèmes peuvent utiliser différents indicateurs de séquences de couleurs.

Je vous suggère d'essayer d'utiliser ncurses . Outre la couleur, ncurses peut faire beaucoup d'autres choses intéressantes avec l'interface utilisateur de la console.

13voto

Praveen S Points 7978

Vous pouvez attribuer une couleur à chaque fonctionnalité pour la rendre plus utile.

#define Color_Red "\33[0:31m\\]" // Color Start
#define Color_end "\33[0m\\]" // To flush out prev settings
#define LOG_RED(X) printf("%s %s %s",Color_Red,X,Color_end)

foo()
{
LOG_RED("This is in Red Color");
}

De la même manière, vous pouvez sélectionner différents codes de couleur et rendre le tout plus générique.

11voto

Stephen Points 16714

Vous pouvez émettre des codes de contrôle de couleur spéciaux pour obtenir une sortie de terminal colorée, voici une bonne ressource à ce sujet comment imprimer des couleurs .

Par exemple :

printf("\033[22;34mHello, world!\033[0m");  // shows a blue hello world

EDIT : Ma version originale utilisait des codes de couleur rapides, ce qui ne fonctionne pas :( Celle-ci fonctionne (je l'ai testée).

8voto

Veles Points 111
#include <stdio.h>

#define BLUE(string) "\x1b[34m" string "\x1b[0m"
#define RED(string) "\x1b[31m" string "\x1b[0m"

int main(void)
{
    printf("this is " RED("red") "!\n");

    // a somewhat more complex ...
    printf("this is " BLUE("%s") "!\n","blue");

    return 0;
}

lecture Wikipedia :

  • \x1b [0m réinitialise tous les attributs
  • \x1b [31m définit la couleur du premier plan en rouge
  • \x1b [44m mettrait l'arrière-plan en bleu.
  • les deux : \x1b [31;44m
  • les deux mais inversés : \x1b [31;44;7m
  • n'oubliez pas de réin réin réin réinitialiser par la suite \x1b [0m ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X