Ich schreibe also eine Terminalemulation (ich weiß, ich sollte nur Kitt kompilieren usw.) und bin gerade dabei, vttest zu durchlaufen, um sicherzustellen, dass es richtig ist. Ich stütze mich vorerst auf den VT102, werde aber später Terminalfunktionen wie Farbe hinzufügen, wenn die Grundlagen richtig funktionieren.
Der Befehlssatz ist meistens ANSI. DEC hatte einen eigenen Befehlssatz, unterstützte jedoch die ANSI-Befehle von etwa 1973. Diese ANSI-Standards sind anscheinend derzeit nicht verfügbar, aber die ECMA-Äquivalente sind, ich habe sie (ECMA-48 scheint am relevantesten zu sein), beantwortet diese Frage jedoch nicht, soweit ich kann sehen. Die meisten ANSI-Befehlssequenzen beginnen mit ESC. Viele Befehle beginnen mit der hier als CSI angezeigten Befehlssequenzkennung, die in den Daten als 0x1c 0x5b (ESC [
) oder 0xdb dargestellt wird, wenn eine 8-Bit-Kommunikation möglich war. Dann folgte eine Sequenz, die den Befehl identifizierte. Einige Befehle wirken sich auf die Cursorposition aus, andere auf den Bildschirm, andere auf den Host und so weiter.
Einige Terminalbefehle enthalten ein numerisches Argument. Beispiel CSI 10 ; 5 H
bedeutet, dass die Cursorposition Zeile 10, Spalte 5 erstellt wird. Wenn das numerische Argument fehlt, muss ein Standardwert verwendet werden: CSI 10 ; H
bedeutet, dass die Cursorposition Zeile 10, Spalte 1 erstellt wird, da 1 der Standardwert ist, wenn kein Argument angegeben wird.
Ich habe das vt102-Handbuch von vt100.net (großartige Ressource) und ungefähr ein Dutzend Seiten, die teilweise Informationen zu diesen Befehlssequenzen enthalten. Anscheinend hat es die komplette Gospel-DEC-Terminalspezifikation nie aus DEC geschafft.
Klar ist, dass der CSI C
Cursor nach rechts bewegt wird und der Standardwert 1 ist.
Was nicht klar ist, ist die Bedeutung von CSI 0 C
.
Warum dort eine Null haben, scheint der Befehl nichts zu tun? Wenn es "Standardwert verwenden" bedeutet, könnte es stattdessen als 1 gesendet worden sein, aber die kürzere Zeichenfolge hätte kein Argument und würde davon abhängen, dass der Standardwert trotzdem als 1 interpretiert wird. Diese tatsächlichen physischen VT-Terminals wurden häufig bei 300 Baud und darunter verwendet, sodass das eine Zeichen eine Rolle spielte!
Ich bin mit vttest nicht so weit fortgeschritten, dass ich es einfach in beide Richtungen versuchen und sehen kann, was alles perfekt macht, aber ich bin weit genug, dass kleine Fragen wie diese anfangen, wichtig zu werden.
quelle
[
, das entweder als zweistellige SequenzESC [
oder wie[
mit dem gesetzten 8. Bit codiert werden kann . (Einige Modelle unterstützen möglicherweise nurESC [
) Ich weiß nicht, wasCSI 0 C
auf dem vt102 getan hat; auf xterm ist es äquivalent zuCSI 1 C
. Ich vermute, weiß aber nicht genau, dass 0 und das Fehlen eines Wertes irgendwann identisch analysiert werden (denken Sie nachatoi
). Haben Sie in der xterm-Quelle nach Kommentaren gesucht?Antworten:
Ich habe mich mit Thomas Dickey (unsichtbar-island.net) in Verbindung gesetzt, der xterm und vttest verwaltet - er erklärte, dass dies
CSI 0 C
dasselbe ist wieCSI 1 C
oderCSI C
in xterm.Für alle, die weitere Informationen zur Terminalprogrammierung suchen, empfehle ich dringend, die von ihm gehostete xterm-Quelle zu überprüfen - insbesondere die ctlseqs.txt in xterm, die der von mir gesuchten Referenz für echte Terminalsteuerungssequenzen sehr ähnlich sieht.
quelle
Warum Hardcode-Kompatibilität für einen bestimmten Terminaltyp, wenn Sie bereits eine Datenbank haben, die die Funktionalität bestimmten Codesequenzen für viele verschiedene Terminals zuordnet? (Die terminfo-Datenbank befindet sich normalerweise in / usr / share und ist in den meisten ncurses-Distributionen enthalten.) Jede Ressource zu Flüchen sollte erklären, wie diese Funktionen gekennzeichnet sind.
Beachten Sie, dass Terminfo-Dateien normalerweise kompiliert werden (mit tic), sodass Sie möglicherweise ein wenig graben müssen, um die Terminfo-Quelldateien zu finden.
Siehe auch http://tldp.org/HOWTO/Text-Terminal-HOWTO.html#toc16 (es gibt einen Link zu einem Repository von terminfo.src-Dateien)
quelle