Was Sie fragen, ist nicht wirklich eine Grafik-API, sondern nur Terminal-Steuerzeichen.
Dahinter steckt viel Geschichte, aber Terminals waren früher Fernschreiber . Grundsätzlich eine Schreibmaschine mit Track-Papier, die über eine serielle Verbindung an den Computer angeschlossen ist. Wenn Sie ein Zeichen eingeben, wird dieser Binärwert an den Computer gesendet (und auf der Seite eingegeben). Der Computer druckte Zeichen als Ausgabe der von Ihnen angeforderten Daten zurück.
Für die Steuerung des Terminals wurden Sonderzeichen verwendet (daher stammt der Steuerschlüssel, um diese Zeichen zu erzeugen). Beispiel: ^H
oder ^?
wäre eine Rücktaste, ^M
ist ein Wagenrücklauf (bewegt den Cursor an den Anfang der Zeile) und ^J
ist ein Zeilenvorschub (bewegen Sie die Seite um eine Zeile nach oben). Einige Steuercodes haben eine Escape-Sequenz in C (die von fast allen Programmiersprachen gemeinsam genutzt wird), um die Steuerzeichen zu generieren. Die Kontrollen aufgelistet zuvor wäre \b
, \r
, \n
jeweils.
Der Terminal-Emulator, den Sie heute verwenden, ist genau das, wonach das klingt. Es ist eine Software, die vorgibt, ein alter Fernschreiber zu sein. In gewisser Weise ist es fast so, als ob Unix immer noch denkt, dass Sie eine Schreibmaschine verwenden, um mit ihr zu kommunizieren.
Im Fall von curl
schreibt es eine ganze Zeile und sendet dann \r
(Wagenrücklauf), wobei der Cursor an den Anfang der Zeile gesetzt wird, und schreibt dann eine weitere Zeile. Da kein Zeilenvorschub gesendet wird, wird immer wieder über dieselbe Zeile auf dem Bildschirm geschrieben.
Hier ist etwas, das Sie versuchen können, um dies zu demonstrieren:
echo -n "First" ; sleep 5 ; echo -en "\rSecond\n"
Sie sehen das Wort "Zuerst" gedruckt (aber es wird keine neue Zeile gesendet). 5 Sekunden später wird es durch das Wort "Second" ersetzt und eine neue Zeile gesendet. Sie können dieses Muster unbegrenzt wiederholen. Versuchen Sie, "Third" selbst hinzuzufügen, Sie werden etwas sehen, das Sie wahrscheinlich nicht erwartet haben ;-)
Weitere Informationen zu diesen und anderen Steuerzeichen finden Sie im ascii(7)
Handbuch.
ncurses
.Diese Frage besteht eigentlich aus mehreren Fragen, und "Steuerzeichen" adressieren nur einen kleinen Teil davon, z. B. den Fortschrittsbalken für
curl
. Im Allgemeinen sind dies gemeinsame Merkmale von Terminals (und Terminalemulatoren).Die meisten dieser allgemeinen Funktionen sind in ECMA-48: Steuerfunktionen für codierte Zeichensätze standardisiert . Jedoch sind auch andere Funktionen nicht . Sie sind implementierungsdefiniert.
ECMA-48 bezieht sich auf Steuerfunktionen . Dies umfasst Steuerzeichen und Steuersequenzen (häufig als Escape-Sequenzen, ANSI-Sequenzen usw. bezeichnet).
Einige Steuerzeichen werden für einfache Operationen verwendet, z.
Der Fortschrittsbalken für
curl
wird mit diesen einfachen Operationen erstellt. Aber Steuerzeichen können nur so viel, nicht mehr. Kontrollsequenzen bewirken mehr, z.Soviel zu Parallelen zwischen einfach / komplex. Steuersequenzen werden auch verwendet, um die Farbe von Text und Hintergrund zu ändern, Text vom Bildschirm zu löschen und Text in umgekehrter Darstellung anzuzeigen (oder fett, unterstrichen, blinkend).
Programme, die einen Reverse-Video-Fortschrittsbalken (oder einen farbigen Fortschrittsbalken) zeichnen, verwenden Steuersequenzen .
Obwohl Steuersequenzen mehr können, können sie nur bestimmte Dinge tun. Das Zusammenfügen zu Texteditoren, Installationsbildschirmen (und Programmen, die farbige Fortschrittsbalken zeichnen) wird kompliziert. Einiges davon wird durch die Verwendung von Bibliotheken, die über diese Dinge Bescheid wissen, vereinfacht. Anfangs hatten wir termcap (und eine Datenbank mit einigen hundert Terminaltypen), die auf terminfo erweitert wurde (und eine Datenbank mit rund tausend Terminaltypen).
Selbst bei Standardisierung gibt es Dutzende von Terminalbeschreibungen, die Sie verwenden können . Daher verwenden wir weiterhin Bibliotheken für alle außer den trivialsten dieser Anwendungen. Einer ist ncurses ("new-curses"), ein anderer ist slang (technisch "S-Lang").
Weiterführende Literatur:
quelle