Xterm.js: 'restaurer le curseur' restaure la position mais pas les attributs de texte

Créé le 20 juin 2018  ·  4Commentaires  ·  Source: xtermjs/xterm.js

J'ai eu quelques problèmes avec certaines séquences d'échappement VT100 :

  • enregistrer le curseur (ESC 7) (DECSC)
  • restaurer le curseur (ESC 8) (DECRC)

Habituellement, un terminal VT100 doit enregistrer la position du curseur mais également les attributs des caractères lors de l'écriture d'une séquence d'échappement de curseur de sauvegarde
Les attributs de caractères doivent être restaurés lors de l'écriture d'un curseur de restauration.

Actuellement, la position du curseur est sauvegardée et restaurée mais pas les attributs des caractères .

J'ai testé le comportement des séquences d'échappement de sauvegarde/restauration sur d'autres implémentations du VT100 pour m'assurer qu'elles le géraient :

  • gnome-terminal
  • terminateur
  • hterme

Je vais donner quelques détails ci-dessous et commencer à travailler sur une solution puisque j'en ai besoin pour moi-même.
Continuez ce bon travail!

Des détails

  • Navigateur et version du navigateur : Chromium : version 62.0.3202.89 (Builder développeur) construite sur Debian buster/sid, fonctionnant sur Debian buster/sid (64 bits)
  • Version du système d'exploitation : debian buster/sid
  • version de xterm.js : 3.4.1

Étapes à reproduire

Voici les séquences d'échappement VT100 utilisées pour les tests :

\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)

Avec xtermjs, "ne devrait pas être coloré" est coloré

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

Dans un bash, "ne devrait pas être coloré" ne sera pas coloré

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

Comment réparer

Il me semble que les attributs de texte doivent être enregistrés et restaurés avec la position, ici .
Voici comment hterm gère le curseur de sauvegarde/restauration

éditer :
Tous les attributs des caractères (fg color, bg color, et les modes drapeaux spéciaux : gras, italique, négatif, ..) sont stockés dans l'attribut 'curAttr' de la classe 'Terminal'. L'enregistrement d'une copie de cet attribut devrait suffire à restaurer tous les attributs des personnages à la fois.

help wanted typbug

Commentaire le plus utile

Sinon, nous devrions créer un problème distinct pour cela. La capture de tout cela devrait probablement être effectuée dans quelque chose comme un objet d'état ICursorState pour garder les choses organisées.

Tous les 4 commentaires

VTE était aussi bogué; peut-être pouvez-vous trouver quelques éléments intéressants dans VTE 731205 .

@7PH Étant donné que vous modifiez de toute façon DECSC, vous pouvez peut-être consulter https://vt100.net/docs/vt510-rm/DECSC.html , il manque encore d'autres attributs de terminal, qui devraient également être traités.

Sinon, nous devrions créer un problème distinct pour cela. La capture de tout cela devrait probablement être effectuée dans quelque chose comme un objet d'état ICursorState pour garder les choses organisées.

Fusionné dans le PR et transféré le reste des propriétés à https://github.com/xtermjs/xterm.js/issues/1526

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

chris-tse picture chris-tse  ·  4Commentaires

albinekb picture albinekb  ·  4Commentaires

parisk picture parisk  ·  3Commentaires

jerch picture jerch  ·  3Commentaires

fabiospampinato picture fabiospampinato  ·  4Commentaires