Xterm.js: 'restaurar cursor' restaurando la posición pero no los atributos de texto

Creado en 20 jun. 2018  ·  4Comentarios  ·  Fuente: xtermjs/xterm.js

Tuve algunos problemas al trabajar con algunas secuencias de escape VT100:

  • guardar cursor (ESC 7) (DECSC)
  • restaurar cursor (ESC 8) (DECRC)

Por lo general, un terminal VT100 debe guardar la posición del cursor pero también los atributos de los caracteres al escribir una secuencia de escape para guardar el cursor.
Los atributos de los caracteres deben restaurarse al escribir un cursor de restauración.

Actualmente, la posición del cursor se guarda y restaura, pero no los atributos de los personajes .

Probé el comportamiento de las secuencias de escape de guardar / restaurar en otras implementaciones de VT100 para asegurarme de que lo estaban manejando:

  • gnomo-terminal
  • terminador
  • hterm

Daré algunos detalles a continuación y comenzaré a trabajar en una solución, ya que la necesito para mí.
¡Mantener el buen trabajo!

Detalles

  • Navegador y versión del navegador: Chromium: versión 62.0.3202.89 (compilación del desarrollador) construida en Debian buster / sid, que se ejecuta en Debian buster / sid (64 bits)
  • Versión del sistema operativo: debian buster / sid
  • Versión de xterm.js: 3.4.1

pasos para reproducir

Aquí están las secuencias de escape del VT100 utilizadas para las pruebas:

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

Con xtermjs, "no debe ser coloreado" se colorea

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

En una fiesta, "no se debe colorear" no se coloreará

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

Como arreglar

Me parece que los atributos de texto deben guardarse y restaurarse junto con la posición, aquí .
Así es como hterm maneja el cursor de guardar / restaurar

editar :
Todos los atributos de los caracteres (color fg, color bg y los modos de bandera especiales: negrita, cursiva, negativo, ..) se almacenan en el atributo 'curAttr' de la clase 'Terminal'. Guardar una copia de este atributo debería ser suficiente para restaurar todos los atributos de los personajes a la vez.

help wanted typbug

Comentario más útil

De lo contrario, deberíamos crear un problema aparte. La captura de todos estos probablemente debería hacerse en algo como un objeto ICursorState state para mantener las cosas organizadas.

Todos 4 comentarios

VTE también solía tener errores; quizás pueda encontrar algunos bits interesantes en VTE 731205 .

@ 7PH Ya que está modificando DECSC de todos modos, tal vez pueda echar un vistazo a https://vt100.net/docs/vt510-rm/DECSC.html , todavía faltan algunos atributos de terminal más, que también deben manejarse.

De lo contrario, deberíamos crear un problema aparte. La captura de todos estos probablemente debería hacerse en algo como un objeto ICursorState state para mantener las cosas organizadas.

Se fusionó en el PR y se bifurcó el resto de las propiedades a https://github.com/xtermjs/xterm.js/issues/1526

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

travisobregon picture travisobregon  ·  3Comentarios

Tyriar picture Tyriar  ·  4Comentarios

Tyriar picture Tyriar  ·  4Comentarios

zhangjie2012 picture zhangjie2012  ·  3Comentarios

johnpoth picture johnpoth  ·  3Comentarios