Tive alguns problemas ao trabalhar com algumas sequências de escape VT100:
Normalmente, um terminal VT100 deve salvar a posição do cursor, mas também os atributos dos caracteres ao escrever uma sequência de escape de salvar o cursor
Os atributos dos caracteres devem ser restaurados ao escrever um cursor de restauração.
Atualmente, a posição do cursor é salva e restaurada, mas não os atributos dos caracteres .
Eu testei o comportamento das sequências de escape salvar / restaurar em outras implementações VT100 para garantir que estavam lidando com isso:
Vou dar alguns detalhes abaixo e vou começar a trabalhar em uma solução, pois preciso dela para mim mesmo.
Continue com o ótimo trabalho!
Aqui estão as sequências de escape VT100 usadas para teste:
\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)
Com xtermjs, "não deve ser colorido" é colorido
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>"
Em uma festa, "não deve ser colorido" não será colorido
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>"
Parece-me que os atributos de texto devem ser salvos e restaurados junto com a posição, aqui .
Aqui está como o hterm está lidando com o cursor salvar / restaurar
editar :
Todos os atributos de caracteres (cor fg, cor bg e os modos de sinalização especial: negrito, itálico, negativo, ..) são armazenados no atributo 'curAttr' da classe 'Terminal'. Salvar uma cópia deste atributo deve ser o suficiente para restaurar todos os atributos dos personagens de uma vez.
VTE também costumava ser problemático; talvez você possa encontrar alguns bits interessantes em VTE 731205 .
@ 7PH Já que você está modificando DECSC de qualquer maneira, talvez você possa dar uma olhada em https://vt100.net/docs/vt510-rm/DECSC.html , existem mais alguns atributos de terminal ainda ausentes, que devem ser tratados também.
Do contrário, devemos criar um problema separado para ele. A captura de tudo isso provavelmente deve ser feita em algo como um objeto de estado ICursorState
para manter as coisas organizadas.
Incorporado no PR e bifurcado do resto das propriedades para https://github.com/xtermjs/xterm.js/issues/1526
Comentários muito úteis
Do contrário, devemos criar um problema separado para ele. A captura de tudo isso provavelmente deve ser feita em algo como um objeto de estado
ICursorState
para manter as coisas organizadas.