Tuve algunos problemas al trabajar con algunas secuencias de escape VT100:
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:
Daré algunos detalles a continuación y comenzaré a trabajar en una solución, ya que la necesito para mí.
¡Mantener el buen trabajo!
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>"
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.
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
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.