#terminal #xterm #windows-terminal
Вопрос:
Терминал Windows недавно добавил поддержку режима вставки в квадратных скобках в версии 1.7. Приложения на базе терминалов теперь могут определять, является ли полученный текст частью набора текста пользователем или он был вставлен и должен быть обработан массово.
Похоже, что поддержка других вводителей управляющих последовательностей отсутствует, поэтому нет способа получить текущее состояние (через режим декодирования запросов / DECRQM) или использовать сохранение и восстановление на основе стека.
Таким образом, мои вопросы таковы:
- Есть ли какой-либо другой способ восстановить режим вставки в квадратные скобки до выхода из моего приложения?
- Если нет, то каким был бы желаемый способ выхода из режима? Установить или сбросить?
Ответ №1:
С терминалом Windows #10153 много чего не так, так как разработчики, как говорится, «стреляли от бедра». Там нет изучения доступной документации, тестирования и т. Д.
В отчете об ошибке не говорится о xterm, поскольку его DECRQM фактически возвращает значение для вставки в квадратные скобки. Вот скриншот в vttest, иллюстрирующий это:
XTSAVE
и XTRESTORE
являются старыми функциями, относящимися к декабрю 1986 года, предшествовавшими выпуску ПК VT420 (анонсирован в феврале 1992 года) чуть более чем на 5 лет. Поскольку DEC участвовала в разработке xterm в 1980-х годах (см. Уведомление об авторских правах), можно было предположить, что ее подразделение терминалов приняло бы это во внимание. Но это было так давно, что вряд ли кто-то сможет указать, почему этого не произошло.
Как и функция сохранения/восстановления курсора, функция сохранения/восстановления в частном режиме не использует стек.
Вернемся к вопросу: суть #10153 в том, что разработчики терминалов Windows решили не делать его совместимым с xterm, предоставив ответы управления, которые позволили бы приложению определить, в каком состоянии оно находится. Возможно, в какой-то момент терминал Windows предоставит решение. Однако DECRQM
это функция VT320 (и выше), в то время как терминал Windows идентифицирует себя как VT100 (но маскируется под xterm).
Дальнейшее чтение:
- Контрольные последовательности XTerm (Разное)
- Структура модульного тестирования для эмуляции терминала #1746
- Добавьте поддержку экранного режима DECSCNM #3773 (в конечном итоге решено)
- RE: ms-терминал в terminfo.src (не разрешен, см. #8303)
Комментарии:
1. Спасибо за твой ответ, Томас. Согласны ли вы с тем, что приложение должно предполагать, что состояние не установлено при запуске, и не имеет значения, возвращает ли приложение состояние в исходное состояние перед выходом?
2. Это не обязательно для xterm. Если разработчик настаивает на настройке
TERM=xterm-256color
, нет альтернативы тому, чтобы рассматривать его недостатки как ошибки и искать лучший эмулятор терминала.3. Вы, кажется, указываете, что терминал Windows, возможно, не лучший выбор для эмулятора терминала. Что бы вы предложили использовать вместо этого (совместимо с Windows)?
4. Рекомендовать конкретные программы-это не по теме. (Если на то пошло, отсутствие программируемости в этом терминале также делает его не по теме). Если бы я давал рекомендации, я мог бы быть предвзятым по отношению к разработчикам, которые вносят конструктивный вклад в мои проекты. Так что я не буду этого делать.
Ответ №2:
Подводя итог обсуждению, которое я провел на трекере ошибок терминала Windows, об отсутствующей поддержке DECRQM или XTSAVE XTRESTORE:
Это неявное предположение о том, что приложение на базе терминала установит любые желаемые режимы при запуске и сбросит значение по умолчанию в конце приложения. Несмотря на то, что это неэффективно, это способ обойти отсутствие поддержки DECRQM и других способов запроса режимов VT-100.