J'ai eu quelques problèmes avec certaines séquences d'échappement VT100 :
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.
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 :
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!
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>"
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.
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
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.