- Registriert
- 29.01.04
- Beiträge
- 910
Farbe im Terminal
Da ich vor kurzem mit Escape-Sequenzen herumgespielt habe, will ich diese euch nicht vorenthalten. Es war mühsam, sich selber zu informieren, da die Informationen weit verbreitet im Internet liegen. Deshalb schreibe ich euch diesen Artikel.
Im übrigen benutze ich xterm-color in der bash.
Was machen Escape-Sequenzen?
Mit Escape-Sequenzen ist man in der Lage, das Aussehen des Terminals zur Laufzeit zu verändern. Man kann zum Beispiel eingeben, dass jeder folgende Text rot mit weißem Hintergrund werden soll, oder aber dass der Cursor in der obersten Zeile erscheinen soll.
Escape-Sequenzen kann man auch von Programmen aus benutzen, wenn also jemand in C definieren will, dass das nächste Wort einen blauen Hintergrund haben soll, so kann er dies einfacher über Escape-Sequenzen als über ncurses machen (wobei ncurses genau diese Escape-Sequenzen benutzt).
Escape
Das Wichtigste bei Escape-Sequenzen ist, wie der Name schon sagt, dass Escape. Die letzten Wochen habe ich gesucht, wo ich das Escape-Zeichen in das Terminal eingeben konnte, es aber erst heute wieder gefunden
.
Folgende Tastenkombination ist dazu nötig: Ctrl-v und dannach ein ESC
Es erscheint im Terminal die Ausgabe ^[, wobei beide Zeichen zusammen sich wie eines verhalten.
Wenn man ein Esc-Zeichen aus einem Commandline-Tool heraus braucht, so sollte man \033 (bei C, C++ und Java) benutzen.
Im folgenden werde ich das Escape-Zeichen als \e abkürzen.
Erste Schritte
Als erstes wollen wir die Textfarbe des Terminals ändern. Wir wollen diese in diesem Beispiel rot haben. Dazu geben wir in das Terminal folgendes ein:
echo "\e[31m"
(VORSICHT: nach \e kommt ein [. Am Ende sieht das Kommando in der Shell so aus: echo "^[[31m")
Nun wird jeder folgende Text rot dargestellt.
Für die allgemeine Schreibweise werde ich Sachen, die der User für jedes Kommando selber eingeben muss, mit {...} kennzeichnen. So ist zum Beispiel {Count} irgendeine natürliche Zahl, die man eingeben muss.
Um die Texteigenschaften zu verändern geht man allgemein so vor:
\e[{attribute1};{attribute2};{...};{attributeX}m
Dabei kann man beliebig viele Attribute eingeben, wobei sich 2 verschiedene überschreiben können (so wird ein Text nicht in 2 verschiedenen Farben angezeigt, wenn ich zwei verschiedene Textfarben als Attribut eingebe).
Folgende Attribute gibt es im Terminal:
0: Attribute auf Ursprung stellen
4: Unterstrichener Text
5: Blinkender Text
7: Hintergrundfarbe und Textfarbe sind vertauscht
8: Text wird unsichtbar (!WARNUNG!: Mit Vorsicht zu genießen)
Textfarben:
30: Schwarz
31: Rot
32: Grün
33: Gelb
34: Blau
35: Magenta
36: Cyan
37: Weiß
Hintergrundfarben:
40: Schwarz
41: Rot
42: Grün
43: Gelb
44: Blau
45: Magenta
46: Cyan
47: Weiß
Weitere Befehle
Es ist langweilig, alle möglichen Befehle aufzuzählen, deshalb kommt dies jetzt in 2 Rutschen (1 - Für den User; 2 - Für den Programmierer(der auch erstere benutzen kann; diese Befehle machen als Benutzer keinen Sinn))
User-Befehle:
Löschen des Bildschirms: echo "\ec"
Curser {Count} Zeilen hoch bewegen: echo "\e[{Count}A"
Curser {Count} Zeilen runter bewegen: echo "\e[{Count}B"
Curser genau Positionieren: echo "\e[{Row};{Column}H"
so, dies war es auch schon. Für die C-Programmierer habe ich noch ein kleines Beispiel (Man hätte zwar die Ausgabe größtenteils in eine Zeile bekommen, aber dann wäre der Code schwerer zu verstehen und zu pflegen):
Viel Spass beim herumspielen
Squart
Da ich vor kurzem mit Escape-Sequenzen herumgespielt habe, will ich diese euch nicht vorenthalten. Es war mühsam, sich selber zu informieren, da die Informationen weit verbreitet im Internet liegen. Deshalb schreibe ich euch diesen Artikel.
Im übrigen benutze ich xterm-color in der bash.
Was machen Escape-Sequenzen?
Mit Escape-Sequenzen ist man in der Lage, das Aussehen des Terminals zur Laufzeit zu verändern. Man kann zum Beispiel eingeben, dass jeder folgende Text rot mit weißem Hintergrund werden soll, oder aber dass der Cursor in der obersten Zeile erscheinen soll.
Escape-Sequenzen kann man auch von Programmen aus benutzen, wenn also jemand in C definieren will, dass das nächste Wort einen blauen Hintergrund haben soll, so kann er dies einfacher über Escape-Sequenzen als über ncurses machen (wobei ncurses genau diese Escape-Sequenzen benutzt).
Escape
Das Wichtigste bei Escape-Sequenzen ist, wie der Name schon sagt, dass Escape. Die letzten Wochen habe ich gesucht, wo ich das Escape-Zeichen in das Terminal eingeben konnte, es aber erst heute wieder gefunden

Folgende Tastenkombination ist dazu nötig: Ctrl-v und dannach ein ESC
Es erscheint im Terminal die Ausgabe ^[, wobei beide Zeichen zusammen sich wie eines verhalten.
Wenn man ein Esc-Zeichen aus einem Commandline-Tool heraus braucht, so sollte man \033 (bei C, C++ und Java) benutzen.
Im folgenden werde ich das Escape-Zeichen als \e abkürzen.
Erste Schritte
Als erstes wollen wir die Textfarbe des Terminals ändern. Wir wollen diese in diesem Beispiel rot haben. Dazu geben wir in das Terminal folgendes ein:
echo "\e[31m"
(VORSICHT: nach \e kommt ein [. Am Ende sieht das Kommando in der Shell so aus: echo "^[[31m")
Nun wird jeder folgende Text rot dargestellt.
Für die allgemeine Schreibweise werde ich Sachen, die der User für jedes Kommando selber eingeben muss, mit {...} kennzeichnen. So ist zum Beispiel {Count} irgendeine natürliche Zahl, die man eingeben muss.
Um die Texteigenschaften zu verändern geht man allgemein so vor:
\e[{attribute1};{attribute2};{...};{attributeX}m
Dabei kann man beliebig viele Attribute eingeben, wobei sich 2 verschiedene überschreiben können (so wird ein Text nicht in 2 verschiedenen Farben angezeigt, wenn ich zwei verschiedene Textfarben als Attribut eingebe).
Folgende Attribute gibt es im Terminal:
0: Attribute auf Ursprung stellen
4: Unterstrichener Text
5: Blinkender Text
7: Hintergrundfarbe und Textfarbe sind vertauscht
8: Text wird unsichtbar (!WARNUNG!: Mit Vorsicht zu genießen)
Textfarben:
30: Schwarz
31: Rot
32: Grün
33: Gelb
34: Blau
35: Magenta
36: Cyan
37: Weiß
Hintergrundfarben:
40: Schwarz
41: Rot
42: Grün
43: Gelb
44: Blau
45: Magenta
46: Cyan
47: Weiß
Weitere Befehle
Es ist langweilig, alle möglichen Befehle aufzuzählen, deshalb kommt dies jetzt in 2 Rutschen (1 - Für den User; 2 - Für den Programmierer(der auch erstere benutzen kann; diese Befehle machen als Benutzer keinen Sinn))
User-Befehle:
Löschen des Bildschirms: echo "\ec"
Curser {Count} Zeilen hoch bewegen: echo "\e[{Count}A"
Curser {Count} Zeilen runter bewegen: echo "\e[{Count}B"
Curser genau Positionieren: echo "\e[{Row};{Column}H"
so, dies war es auch schon. Für die C-Programmierer habe ich noch ein kleines Beispiel (Man hätte zwar die Ausgabe größtenteils in eine Zeile bekommen, aber dann wäre der Code schwerer zu verstehen und zu pflegen):
Code:
#include <stdio.h>
int main(int argc, char *argv[]) {
int i;
for (i = 0; i <= 20; i++) {
printf("Noch ");
printf("\033[%dm", i%8+30); // Textfarbe setzen
if (i % 2 == 0)
printf("\033[4m"); // Unterstreichen
printf("%2d",20-i); // Zahl ausgeben
printf("\033[0m"); // alle Änderungen rückgaengig machen
printf(" Sekunden...\n"); // Wichtig ist das \n -> Cursor geht in die nächste Zeile
sleep(1); // Eine Sekunde warten
printf("\033[1A"); // In die Zeile oben drüber gehen
}
printf("\n");
return 0;
}
Viel Spass beim herumspielen
Squart
Zuletzt bearbeitet: