2010-08-17 7 views
17

Ich habe eine C-Datei unter Linux ausgeführt. Es druckt einige Linien in rot (Fehler) und einige in grün (Pässe). Wie Sie vielleicht erwarten, verwendet er Codes in den printf Aussagen entkommen wie folgt:C-Code ändert Terminal-Textfarbe; Wie man Standardeinstellungen wiederherstellt? Linux

#define BLACK "\033[22;30m" 
#define GREEN "\033[22;31m" 

printf(GREEN "this will show up green" BLACK "\n"); 

Wenn die BLACK am Ende nicht da war, wird das Terminal Text für alles sein grün fortsetzen. Für den Fall, dass Sie es nicht verstanden haben, ist das für ein Terminalfenster mit einem nicht schwarzen Hintergrund gut, aber ansonsten werden Sie schwarz-auf-schwarz sein. Nicht gut! Das Ausführen des Programms hat dieses Problem, ebenso wie das Erfassen der Ausgabe in einer Textdatei und dann das Anzeigen der Datei mit "mehr" oder "weniger".

Gibt es einen Code zum Wiederherstellen der Standardwerte, anstatt eine Farbe am Ende der printf-Anweisung anzugeben? Dies muss in C sein, aber ich wäre daran interessiert, über andere Ansätze zu lesen.

Update: Danke euch allen. Ihre Antworten haben mir geholfen, an anderer Stelle noch nützlichere Informationen zu finden. ich meine Makros wie folgt aktualisiert (Anmerkung 31 für rot ist und ich festgelegt, dass Tippfehler unten):

#define RESET_COLOR "\e[m" 
#define MAKE_GREEN "\e[32m" 

printf(MAKE_GREEN "this will show up green" RESET_COLOR "\n"); 

fand ich die folgenden Links hilfreich für das Verständnis, wie diese Codes funktionieren:

http://www.phwinfo.com/forum/comp-unix-shell/450861-bash-shell-escapes-not-working-via-putty-ssh.html erklärt, was diese Flucht Sequenzen tun, und ncurses zu verwenden, wenn Portabilität benötigt wird.

http://www.linuxselfhelp.com/howtos/Bash-Prompt/Bash-Prompt-HOWTO-6.html

http://bluesock.org/~willg/dev/ansi.html zeigt mehr auch Escape-Sequenzen; nützlich, um das große Bild

Antwort

2

Typ reset im Terminal:

Mehr über diesen Terminal-Codes finden Sie hier.

Es gibt eine Binärdatei in Linux und OSX namens Reset.

+0

Ok, nicht die genaue Antwort, aber vielleicht hilft es. – Nils

+1

"reset" löscht das Terminalfenster und platziert die Eingabeaufforderung oben auf dem Bildschirm, was nicht der Effekt ist, den ich brauche, aber danke. – jasper77