Sto facendo una semplice applicazione che richiede output colorato. Come posso rendere colorato il mio output come emacs e bash do?output stdlib e colorato in C
Non mi interessa Windows, poiché la mia applicazione è solo per sistemi UNIX.
Sto facendo una semplice applicazione che richiede output colorato. Come posso rendere colorato il mio output come emacs e bash do?output stdlib e colorato in C
Non mi interessa Windows, poiché la mia applicazione è solo per sistemi UNIX.
Tutti i moderni emulatori di terminale utilizzano codici di escape ANSI per mostrare colori e altre cose.
Non preoccupatevi delle librerie, il codice è davvero semplice.
Maggiori informazioni sono here.
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;
}
È possibile emettere codici di controllo colore speciali per ottenere l'output del terminale colorato, ecco una buona risorsa su how to print colors.
Ad esempio:
printf("\033[22;34mHello, world!\033[0m"); // shows a blue hello world
EDIT: Il mio unico originale utilizzato codici di colore rapide, che non funziona :(Questo lo fa (ho testato)
'edition.c: In funzione 'int main (int, const char **)': edition.c: 4: Errore: sequenza di escape sconosciuta '\]' edition.c: 4: Errore : sequenza di escape sconosciuta '\]' edition.c edition.c ~ ' Nient'altro che un mucchio di errori di compilazione :( –
Inoltre, la mia applicazione non dovrebbe dipendere da BASH. –
@Koning: non dipende da BASH , funziona anche in altre shell (ma sono sicuro non tutte). Ho verificato in ksh e csh. Nota Ho modificato il codice di controllo per funzionare correttamente. – Stephen
Trattare con sequenze di colori può ottenere. sistemi disordinati e diversi possono utilizzare diversi indicatori sequenza di colori.
vorrei suggerire di provare a utilizzare ncurses. oltre a colore, ncurses possono fare molte altre cose ordinate con console UI.
L'utilizzo di sequenze di colori differenti è dovuto al fatto che non riesco a trovare un file "colors.h" con tutto il lavoro svolto per me? –
È possibile assegnare un colore a ciascuna 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 saggia è possibile selezionare diversi codici colore e renderlo più generico.
Perché non è possibile stampare un personaggio con formattazione stringa. Si può anche pensare di aggiungere un formato con qualcosa di simile
#define PRINTC(c,f,s) printf ("\033[%dm" f "\033[0m", 30 + c, s)
f
è formato in printf
PRINTC (4, "%s\n", "bar")
stamperà blue bar
PRINTC (1, "%d", 'a')
stamperà red 97
Se usi lo stesso colo r per l'intero programma, è possibile definire la funzione 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;
}
Bel collegamento wiki per i codici colore. –
Ma suppongo di poter eseguire bash in un'emulazione di terminale che non supporta i seq di escape ANSI. – ShinTakezou
Nice flag :) Solo una nit che la domanda è taggata 'c', non 'C++' – Stephen