Ich hatte einige Probleme bei der Arbeit mit einigen VT100-Escape-Sequenzen:
Normalerweise sollte ein VT100-Terminal beim Schreiben einer Escape-Sequenz zum Speichern des Cursors die Cursorposition, aber auch die Zeichenattribute speichern
Die Zeichenattribute sollten beim Schreiben eines Wiederherstellungscursors wiederhergestellt werden.
Ich habe das Verhalten der Escape-Sequenzen zum Speichern/Wiederherstellen bei anderen VT100-Implementierungen getestet, um sicherzustellen, dass sie damit umgehen:
Ich werde unten einige Details angeben und an einer Lösung arbeiten, da ich sie für mich selbst benötige.
Mach weiter so mit der tollen Arbeit!
Hier sind die zum Testen verwendeten VT100-Escape-Sequenzen:
\x1b[0m (attributes off)
\x1b[1;1f (reset origin)
\x1b[2J (clear)
\x1b7 (save cursor state)
\x1b[7m (set negative color)
<colored> (just some output)
\x1b8 (restore cursor state)
<should not be colored>\n\r (another output - will be printed in negative color in xtermjs)
Bei xtermjs ist "sollte nicht gefärbt" farbig
xterm.write('\x1b[0m\x1b[1;1f\x1b[2J\x1b7\x1b[7m <colored>\x1b8<should not be colored>\n\r');
// will print:
// "<should not be colored> <colored>"
In einer Bash wird "sollte nicht gefärbt" nicht gefärbt werden
printf '\x1b[0m\x1b[1;1f\x1b[2J\x1b7\x1b[7m <colored>\x1b8<should not be colored>\n\r'
# will print
# "<should not be colored> <colored>"
Mir scheint, dass Textattribute gespeichert und zusammen mit der Position hier wiederhergestellt werden sollten.
So behandelt hterm den Speicher-/Wiederherstellungs-Cursor
bearbeiten :
Alle Zeichenattribute (fg color, bg color und die speziellen Flag-Modi: fett, kursiv, negativ, ..) werden im Attribut 'curAttr' der Klasse 'Terminal' gespeichert. Das Speichern einer Kopie dieses Attributs sollte ausreichen, um alle Charakterattribute auf einmal wiederherzustellen.
VTE war früher auch fehlerhaft; vielleicht finden Sie in VTE 731205 ein paar interessante
@7PH Da Sie DECSC sowieso modifizieren, können Sie vielleicht einen Blick auf https://vt100.net/docs/vt510-rm/DECSC.html werfen, dort fehlen noch einige weitere Terminalattribute, die ebenfalls behandelt werden sollten.
Wenn nicht, sollten wir dafür ein separates Thema erstellen. Das Erfassen all dieser Daten sollte wahrscheinlich in einem ICursorState
Zustandsobjekt erfolgen, um die Dinge organisiert zu halten.
In der PR zusammengeführt und die restlichen Eigenschaften nach https://github.com/xtermjs/xterm.js/issues/1526 abgezweigt
Hilfreichster Kommentar
Wenn nicht, sollten wir dafür ein separates Thema erstellen. Das Erfassen all dieser Daten sollte wahrscheinlich in einem
ICursorState
Zustandsobjekt erfolgen, um die Dinge organisiert zu halten.