Xterm.js: 'restaurar o cursor' restaurando a posição, mas não os atributos de texto

Criado em 20 jun. 2018  ·  4Comentários  ·  Fonte: xtermjs/xterm.js

Tive alguns problemas ao trabalhar com algumas sequências de escape VT100:

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

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:

  • gnome-terminal
  • o Exterminador do Futuro
  • hterm

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!

Detalhes

  • Navegador e versão do navegador: Chromium: Versão 62.0.3202.89 (Versão do desenvolvedor) construída em Debian buster / sid, rodando em Debian buster / sid (64 bits)
  • Versão do sistema operacional: debian buster / sid
  • versão xterm.js: 3.4.1

Passos para reproduzir

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

Como consertar

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.

help wanted typbug

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.

Todos 4 comentários

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

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

tandatle picture tandatle  ·  3Comentários

Tyriar picture Tyriar  ·  4Comentários

pfitzseb picture pfitzseb  ·  3Comentários

albinekb picture albinekb  ·  4Comentários

ghost picture ghost  ·  4Comentários