Как восстановить приватные режимы VT100 DEC в конце приложения?

#terminal #xterm #windows-terminal

Вопрос:

Терминал Windows недавно добавил поддержку режима вставки в квадратных скобках в версии 1.7. Приложения на базе терминалов теперь могут определять, является ли полученный текст частью набора текста пользователем или он был вставлен и должен быть обработан массово.

Похоже, что поддержка других вводителей управляющих последовательностей отсутствует, поэтому нет способа получить текущее состояние (через режим декодирования запросов / DECRQM) или использовать сохранение и восстановление на основе стека.

Таким образом, мои вопросы таковы:

  • Есть ли какой-либо другой способ восстановить режим вставки в квадратные скобки до выхода из моего приложения?
  • Если нет, то каким был бы желаемый способ выхода из режима? Установить или сбросить?

Ответ №1:

С терминалом Windows #10153 много чего не так, так как разработчики, как говорится, «стреляли от бедра». Там нет изучения доступной документации, тестирования и т. Д.

В отчете об ошибке не говорится о xterm, поскольку его DECRQM фактически возвращает значение для вставки в квадратные скобки. Вот скриншот в vttest, иллюстрирующий это:

снимок экрана vttest с DECRQM для закрытых режимов xterm

XTSAVE и XTRESTORE являются старыми функциями, относящимися к декабрю 1986 года, предшествовавшими выпуску ПК VT420 (анонсирован в феврале 1992 года) чуть более чем на 5 лет. Поскольку DEC участвовала в разработке xterm в 1980-х годах (см. Уведомление об авторских правах), можно было предположить, что ее подразделение терминалов приняло бы это во внимание. Но это было так давно, что вряд ли кто-то сможет указать, почему этого не произошло.

Как и функция сохранения/восстановления курсора, функция сохранения/восстановления в частном режиме не использует стек.

Вернемся к вопросу: суть #10153 в том, что разработчики терминалов Windows решили не делать его совместимым с xterm, предоставив ответы управления, которые позволили бы приложению определить, в каком состоянии оно находится. Возможно, в какой-то момент терминал Windows предоставит решение. Однако DECRQM это функция VT320 (и выше), в то время как терминал Windows идентифицирует себя как VT100 (но маскируется под xterm).

Дальнейшее чтение:

Комментарии:

1. Спасибо за твой ответ, Томас. Согласны ли вы с тем, что приложение должно предполагать, что состояние не установлено при запуске, и не имеет значения, возвращает ли приложение состояние в исходное состояние перед выходом?

2. Это не обязательно для xterm. Если разработчик настаивает на настройке TERM=xterm-256color , нет альтернативы тому, чтобы рассматривать его недостатки как ошибки и искать лучший эмулятор терминала.

3. Вы, кажется, указываете, что терминал Windows, возможно, не лучший выбор для эмулятора терминала. Что бы вы предложили использовать вместо этого (совместимо с Windows)?

4. Рекомендовать конкретные программы-это не по теме. (Если на то пошло, отсутствие программируемости в этом терминале также делает его не по теме). Если бы я давал рекомендации, я мог бы быть предвзятым по отношению к разработчикам, которые вносят конструктивный вклад в мои проекты. Так что я не буду этого делать.

Ответ №2:

Подводя итог обсуждению, которое я провел на трекере ошибок терминала Windows, об отсутствующей поддержке DECRQM или XTSAVE XTRESTORE:

Это неявное предположение о том, что приложение на базе терминала установит любые желаемые режимы при запуске и сбросит значение по умолчанию в конце приложения. Несмотря на то, что это неэффективно, это способ обойти отсутствие поддержки DECRQM и других способов запроса режимов VT-100.