Xterm.js: 'восстановить курсор' восстанавливает позицию, но не текстовые атрибуты

Созданный на 20 июн. 2018  ·  4Комментарии  ·  Источник: xtermjs/xterm.js

У меня возникли проблемы при работе с некоторыми escape-последовательностями VT100:

  • сохранить курсор (ESC 7) (DECSC)
  • восстановить курсор (ESC 8) (DECRC)

Обычно терминал VT100 должен сохранять позицию курсора, но также атрибуты символов при написании escape-последовательности для сохранения курсора.
Атрибуты символов должны быть восстановлены при написании курсора восстановления.

В настоящее время сохраняется и восстанавливается позиция курсора, но не атрибуты символов .

Я протестировал поведение управляющих последовательностей сохранения / восстановления на других реализациях VT100, чтобы убедиться, что они обрабатывают его:

  • гном-терминал
  • терминатор
  • hterm

Я приведу некоторые подробности ниже и начну работать над решением, поскольку оно мне нужно.
Продолжайте в том же духе!

Подробности

  • Браузер и версия браузера: Chromium: версия 62.0.3202.89 (сборка разработчика), построенная на Debian buster / sid, работающая на Debian buster / sid (64-разрядная версия)
  • Версия ОС: debian buster / sid
  • xterm.js версия: 3.4.1

Действия по воспроизведению

Вот escape-последовательности VT100, использованные для тестирования:

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

В xtermjs "не должно быть раскрашено" окрашено

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

В баше "не должен быть цветным" не будет раскрашен

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

Как исправить

Мне кажется, что текстовые атрибуты должны быть сохранены и восстановлены вместе с позицией здесь .
Вот как hterm обрабатывает курсор сохранения / восстановления

редактировать :
Все атрибуты символов (цвет fg, цвет bg и специальные режимы флага: жирный, курсив, отрицательный, ..) хранятся в атрибуте 'curAttr' класса 'Terminal'. Сохранения копии этого атрибута должно быть достаточно, чтобы восстановить все атрибуты персонажа сразу.

help wanted typbug

Самый полезный комментарий

В противном случае мы должны создать для него отдельный выпуск. Захват всего этого, вероятно, следует делать в чем-то вроде объекта состояния ICursorState чтобы все было организовано.

Все 4 Комментарий

VTE раньше тоже глючил; возможно, вы найдете несколько интересных деталей в

@ 7PH Поскольку вы в любом случае модифицируете DECSC, возможно, вы можете взглянуть на https://vt100.net/docs/vt510-rm/DECSC.html , есть еще несколько атрибутов терминала, которые все еще отсутствуют, которые также следует обработать.

В противном случае мы должны создать для него отдельный выпуск. Захват всего этого, вероятно, следует делать в чем-то вроде объекта состояния ICursorState чтобы все было организовано.

Слили в PR и разделили остальные свойства на https://github.com/xtermjs/xterm.js/issues/1526

Была ли эта страница полезной?
0 / 5 - 0 рейтинги