Я использую GNU Screen внутри Mintty. Чтобы заставить колесо прокрутки работать, мне пришлось переключить режим мятного колеса прокрутки с помощью escape-кода (^[[?7787h). Это приводит к тому , что колесо прокрутки не работает less больше. Чтобы это исправить, мне нужно less отправлять соответствующие коды выхода на внешний терминал при запуске и выходе.

Я нашел escape-код ^[P который можно использовать для отправки управляющих кодов на терминал с запущенным экраном. Поэтому я хотел добавить ^[P^[[?7787l к ti TERMCAP внутри экрана. Чтобы добиться этого, я добавил эту строку в мой .screenrc:

termcapinfo * "" "\EP\E[?7787l\E[?1049h"

Но это не повлияло less на всех. Я знаю, что ^[P^[[?7787l работает - если я просто повторю это, все хорошо. Я мог бы просто написать less обертку, которая обрабатывает это, но я бы предпочел иметь возможность делать это через termcap, так как тогда он будет работать во всех приложениях, а не только в меньшем.

Итак, мой вопрос: как я могу изменить, какие escape-коды less отправляет на терминал, когда он переключается на альтернативный экран?

1 ответ1

1

Эта команда должна работать:

termcapinfo * "" "ti=\EP\E[?7787l\E\\\E[?1049h:te=\EP\E[?7787h\E\\\E[?1049l"

(Замена * на более конкретное имя для вашего типа терминала будет еще лучше, но я не знаю, какое значение TERM задает mintty.)

Важные отличия от вашей версии:

  1. Второй и третий параметры команды termcapinfo должны содержать определения termcap (name=value), разделенные символом : не просто пустую escape-последовательность.

  2. Экранирующая последовательность ^[P должна завершаться ^[\ , в противном случае слишком много дальнейшего вывода идет на терминал напрямую без надлежащей обработки Screen (есть некоторая мера предосторожности, чтобы избежать полной блокировки Screen, если последовательность завершения забыта, но дисплей все равно будет запутано).

  3. Вы должны изменить и ti и te , чтобы выход из less (или любой другой полноэкранной программы) правильно восстанавливал предыдущее состояние.

Конечно, если вы вызываете less с опцией -X , колесо мыши не будет работать должным образом, потому что при использовании этой опции less не отправляет строки ti и te в терминал. Помните, что эта опция может быть указана не напрямую в командной строке less , а также через переменную среды LESS .


Однако, если less скомпилирован для использования terminfo вместо termcap , третий параметр команды termcapinfo не изменит поведение less , поскольку он влияет только на содержимое переменной среды TERMCAP экспортируемой screen в его подпроцессы, и базу данных terminfo содержимое не может быть изменено динамически. В этом случае вам нужно будет использовать утилиты, такие как infocmp и tic чтобы создать исходную запись terminfo, содержащую значения smcup и rmcup с вашими изменениями, а затем скомпилировать запись в двоичный формат; затем используйте term <your-entry-name> в .screenrc чтобы использовать эту запись.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .