Ich mache eine einfache Anwendung, die eine farbige Ausgabe erfordert. Wie kann ich meine Ausgabe wie Emacs und Bash einfärben?
Ich interessiere mich nicht für Windows, da meine Anwendung nur für UNIX-Systeme ist.
Ich mache eine einfache Anwendung, die eine farbige Ausgabe erfordert. Wie kann ich meine Ausgabe wie Emacs und Bash einfärben?
Ich interessiere mich nicht für Windows, da meine Anwendung nur für UNIX-Systeme ist.
Andrejs Cainikovs
Alle modernen Terminalemulatoren verwenden ANSI-Escape-Codes, um Farben und andere Dinge anzuzeigen.
Kümmern Sie sich nicht um Bibliotheken, der Code ist wirklich einfach.
Mehr Infos sind hier.
Beispiel 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;
}
Aber ich nehme an, ich kann Bash in einer Terminalemulation ausführen, die ANSI-Escape-Seqs nicht unterstützt.
– Shin Takezou
10. Juli 2010 um 14:55 Uhr
Schöne Flagge 🙂 Nur eine Kleinigkeit, dass die Frage mit ‘c’ und nicht mit ‘c++’ getaggt ist.
– Stefan
10. Juli 2010 um 15:05 Uhr
@ShinTakezou: Ja .. In diesem Fall werden alle ANSI-Escape-Codes ignoriert, und Sie haben keine Optionen, um die ausgefallene Ausgabe vorzunehmen.
– Andrejs Cainikovs
10. Juli 2010 um 15:07 Uhr
ANSI-Escape-Sequenzen werden nicht von Shells interpretiert, sie werden von Terminal-Emulatoren interpretiert.
– ninjalj
10. Juli 2010 um 15:33 Uhr
Besonders gut gefallen hat das “Kümmere dich nicht um Bibliotheken”! ANSI-Codes funktionieren sogar in der Windows-Eingabeaufforderung.
– SzG
21. Dezember 2015 um 22:13 Uhr
Der Umgang mit Farbsequenzen kann unübersichtlich werden und verschiedene Systeme verwenden möglicherweise unterschiedliche Farbsequenzindikatoren.
Ich würde vorschlagen, dass Sie versuchen, es zu verwenden ncurses. Abgesehen von Farbe kann ncurses viele andere nette Dinge mit der Konsolen-Benutzeroberfläche machen.
Ist die Verwendung unterschiedlicher Farbsequenzen der Grund, warum ich keine “colors.h”-Datei mit all dieser für mich erledigten Arbeit finden kann?
– Cooler Speer
27. Januar 2018 um 20:10 Uhr
Sie können jeder Funktion eine Farbe zuweisen, um sie nützlicher zu machen.
#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");
}
Ebenso können Sie verschiedene Farbcodes auswählen und diese allgemeiner gestalten.
Stefan
Sie können spezielle Farbsteuercodes ausgeben, um eine farbige Terminalausgabe zu erhalten. Hier ist eine gute Ressource dazu wie man Farben druckt.
Zum Beispiel:
printf("\033[22;34mHello, world!\033[0m"); // shows a blue hello world
EDIT: My original one used prompt color codes, which doesn’t work 🙁 This one does (I tested it).
#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;
}
reading Wikipedia:
alhelal
If you use same color for whole program , you can define printf()
function.
#include<stdio.h>
#define ah_red "\e[31m"
#define printf(X) printf(ah_red "%s",X);
#int main()
{
printf("Bangladesh");
printf("\n");
return 0;
}
phuclv
Because you can’t print a character with string formating. You can also think of adding a format with something like this
#define PRINTC(c,f,s) printf ("\033[%dm" f "\033[0m", 30 + c, s)
f
is format as in printf
PRINTC (4, "%s\n", "bar")
will print blue bar
PRINTC (1, "%d", 'a')
will print red 97