Risposte:
Tutti i moderni emulatori di terminali utilizzano i codici di escape ANSI per mostrare i colori e altre cose.
Non preoccuparti delle librerie, il codice è davvero semplice.
Maggiori informazioni sono qui .
Esempio in 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;
}
La gestione delle sequenze di colori può diventare confusa e sistemi diversi potrebbero utilizzare diversi indicatori di sequenza di colori.
Ti suggerirei di provare a usare ncurses . Oltre al colore, ncurses può fare molte altre cose pulite con l'interfaccia utente della console.
Puoi ottenere speciali codici di controllo del colore per ottenere un output terminale colorato, ecco una buona risorsa su come stampare i colori .
Per esempio:
printf("\033[22;34mHello, world!\033[0m"); // shows a blue hello world
EDIT: Il mio originale utilizzava i codici colore di prompt, che non funziona :( Questo funziona (l'ho provato).
edition.c: In function ‘int main(int, const char**)’: edition.c:4: error: unknown escape sequence '\]' edition.c:4: error: unknown escape sequence '\]' edition.c edition.c~
Nient'altro che un mucchio di errori di compilazione :(
22
da 1
per vederlo in grassetto .
Puoi assegnare un colore a ogni funzionalità per renderlo più 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");
}
Come saggio, puoi selezionare diversi codici colore e renderlo più generico.
Perché non puoi stampare un personaggio con formattazione di stringhe. Puoi anche pensare di aggiungere un formato con qualcosa del genere
#define PRINTC(c,f,s) printf ("\033[%dm" f "\033[0m", 30 + c, s)
f
è formato come in printf
PRINTC (4, "%s\n", "bar")
stamperà blue bar
PRINTC (1, "%d", 'a')
stamperà red 97
#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;
}
leggendo Wikipedia :