Xterm.js: 'Cursor wiederherstellen' stellt die Position wieder her, aber keine Textattribute

Erstellt am 20. Juni 2018  ·  4Kommentare  ·  Quelle: xtermjs/xterm.js

Ich hatte einige Probleme bei der Arbeit mit einigen VT100-Escape-Sequenzen:

  • Cursor speichern (ESC 7) (DECSC)
  • Cursor wiederherstellen (ESC 8) (DECRC)

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.

Derzeit wird die Position des Cursors gespeichert und wiederhergestellt, jedoch nicht die Zeichenattribute .

Ich habe das Verhalten der Escape-Sequenzen zum Speichern/Wiederherstellen bei anderen VT100-Implementierungen getestet, um sicherzustellen, dass sie damit umgehen:

  • Gnome-Terminal
  • Terminator
  • hterm

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!

Einzelheiten

  • Browser und Browserversion: Chromium: Version 62.0.3202.89 (Developer Build) basierend auf Debian buster/sid, läuft auf Debian buster/sid (64-bit)
  • Betriebssystemversion: debian buster/sid
  • xterm.js-Version: 3.4.1

Schritte zum Reproduzieren

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>"

Wie repariert man

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.

help wanted typbug

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.

Alle 4 Kommentare

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

travisobregon picture travisobregon  ·  3Kommentare

jerch picture jerch  ·  3Kommentare

Tyriar picture Tyriar  ·  4Kommentare

fabiospampinato picture fabiospampinato  ·  4Kommentare

ghost picture ghost  ·  4Kommentare