У меня возникли проблемы при работе с некоторыми escape-последовательностями VT100:
Обычно терминал VT100 должен сохранять позицию курсора, но также атрибуты символов при написании escape-последовательности для сохранения курсора.
Атрибуты символов должны быть восстановлены при написании курсора восстановления.
В настоящее время сохраняется и восстанавливается позиция курсора, но не атрибуты символов .
Я протестировал поведение управляющих последовательностей сохранения / восстановления на других реализациях VT100, чтобы убедиться, что они обрабатывают его:
Я приведу некоторые подробности ниже и начну работать над решением, поскольку оно мне нужно.
Продолжайте в том же духе!
Вот 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'. Сохранения копии этого атрибута должно быть достаточно, чтобы восстановить все атрибуты персонажа сразу.
VTE раньше тоже глючил; возможно, вы найдете несколько интересных деталей в
@ 7PH Поскольку вы в любом случае модифицируете DECSC, возможно, вы можете взглянуть на https://vt100.net/docs/vt510-rm/DECSC.html , есть еще несколько атрибутов терминала, которые все еще отсутствуют, которые также следует обработать.
В противном случае мы должны создать для него отдельный выпуск. Захват всего этого, вероятно, следует делать в чем-то вроде объекта состояния ICursorState
чтобы все было организовано.
Слили в PR и разделили остальные свойства на https://github.com/xtermjs/xterm.js/issues/1526
Самый полезный комментарий
В противном случае мы должны создать для него отдельный выпуск. Захват всего этого, вероятно, следует делать в чем-то вроде объекта состояния
ICursorState
чтобы все было организовано.