Je fais une application simple qui nécessite une sortie colorée. Comment puis-je rendre ma sortie colorée comme emacs et bash? Je ne me soucie pas de Windows, car mon application est uniquement pour les systèmes UNIX.stdlib et sortie colorée en C
Répondre
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.
Plus d'infos est here.
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;
}
Vous pouvez générer des codes de contrôle de couleur spéciaux pour obtenir une sortie de terminal en couleur, voici une bonne ressource sur how to print colors.
Par exemple:
printf("\033[22;34mHello, world!\033[0m"); // shows a blue hello world
EDIT: Mon original utilisé les codes de couleur rapides, ce qui ne fonctionne pas :(Celui-ci fait (je l'ai testé)
'edition.c: En fonction 'int main (int, const char **)': edition.c: 4: Erreur: séquence d'échappement inconnue '\]' edition.c: 4: Erreur : séquence d'échappement inconnue '\]' edition.c edition.c ~ ' Rien de plus qu'un tas d'erreurs de compilation :( –
De plus, mon application ne doit pas dépendre de BASH –
@Koning: Ceci ne dépend pas de BASH , il fonctionne aussi dans d'autres shells (mais je ne suis pas sûr que tout le monde.) J'ai vérifié dans ksh, et csh Remarque: J'ai modifié le code de contrôle pour fonctionner correctement – Stephen
Traiter avec des séquences de couleurs peut obtenir. systèmes en désordre et différents peuvent utiliser différents indicateurs de séquence de couleurs.
Je vous suggère essayer d'utiliser ncurses. Autre que la couleur, ncurses peut faire beaucoup d'autres choses intéressantes avec l'interface utilisateur de la console.
L'utilisation de séquences de couleurs différentes est-elle la raison pour laquelle je ne trouve pas de fichier "colors.h" avec tout ce travail fait pour moi? –
Vous pouvez attribuer une couleur à chaque fonctionnalité pour la rendre plus utile. Comme sage, vous pouvez sélectionner différents codes de couleur et rendre cela plus générique.
#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");
}
Parce que vous ne pouvez pas imprimer un caractère avec la chaîne formattage. Vous pouvez aussi penser à ajouter un format avec quelque chose comme ça
#define PRINTC(c,f,s) printf ("\033[%dm" f "\033[0m", 30 + c, s)
f
est le format que dans printf
PRINTC (4, "%s\n", "bar")
imprimera blue bar
PRINTC (1, "%d", 'a')
imprimera red 97
Si vous utilisez le même colo r pour le programme entier, vous pouvez définir la fonction printf()
.
#include<stdio.h>
#define ah_red "\e[31m"
#define printf(X) printf(ah_red "%s",X);
#int main()
{
printf("Bangladesh");
printf("\n");
return 0;
}
Joli lien wiki pour les codes couleurs. –
Mais je suppose que je peux lancer bash dans une émulation de terminal qui ne supporte pas les seqs d'échappement ANSI. – ShinTakezou
Nice flag :) Juste un nit que la question est marquée 'c', pas 'C++' – Stephen