Согласностраница руководствадля lesskey
следующие клавиши привязаны к левой и правой прокрутке:
\e[ left-scroll
\e] right-scroll
\e( left-scroll
\e) right-scroll
\kl left-scroll
\kr right-scroll
Клавиши со стрелками и Esc-(
/ Esc -)
работают нормально, как и Esc-]
для прокрутки вправо, но Esc-[
не работают для прокрутки влево. Вместо этого он просто показывает это в командной строке:
ESC[
Добавление этой строки в ~/.lesskey
функции в качестве обходного пути:
\e[ left-scroll
Но почему это не работает по умолчанию?
Я наблюдал такое поведение в XFCE4 на Debian stretch, а также в Kubuntu 18.04, а также в различных эмуляторах терминала.
$ less --version
less 487 (GNU regular expressions)
Copyright (C) 1984-2016 Mark Nudelman
less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less
Я думал о том, чтобы подать отчет об ошибке, носписок известных ошибок и запросов на функции предполагает, что это известное поведение:
Запросы на улучшение
[ . . . ]
Номер ссылки: 175
Реализовано в версии: 322
Добавить альтернативную команду для ESC-[.
Это на самом деле ограничение less
или особенность того, как терминалы обрабатывают клавишу Escape?
решение1
Это потому, что ESC [
также является началом последовательности символов, отправляемых несколькими функциональными клавишами на некоторых терминалах, такими как Homeили Endили PageUp... Они также связаны с каким-то действием в less
.
Поэтому при less
получении ESC [
, он ждет большего (без тайм-аута, как это делают некоторые другие приложения).
На моем терминале ESC[6~
есть PageDown. Если я нажимаю Alt+[, я вижу ESC [
как вы. Но тогда я могу войти 6
и ~
и это делает прокрутку вниз.
Если вы запустите TERM=vt100 less
вместо less
, где vt100
на странице terminfo нет записи для Homeили End... вы увидите ESC [
, что работает.
Однако если вы добавите \e[ left-scroll
его в свой ~/.lesskey
(и запустите lesskey
для компиляции в ~/.less
), вы заметите, что ESC [
прокрутка влево работает, но все Home, PageUP... перестают работать, они все прокручиваются влево, а дополнительные символы, которые они отправляют, вызывают некоторый звуковой сигнал.
Если посмотреть на код, то все дело в порядке обработки таблицы команд. ~/.less
Таблица команддобавлено в последний раз, новставлен в голову, поэтому его записи обрабатываютсядовстроенные.
При ESC [
вводе, если запись для \e[ left-scroll
найдена первой, она обрабатывается, если запись для \kD forw-screen
(которая на многих терминалах переводится как \e[6~ forw-screen
) найдена первой, тоэто всего лишьпрефикссоответствовать, иless
ждет больше информации.
Итак, это своего рода ошибка. Исправлением было бы добавление тайм-аута. Однако добавление короткого тайм-аута означало бы отказ от многоклавишных команд; длинный тайм-аут, чтобы дать пользователю достаточно времени для ввода многоклавишной команды, вероятно, сделал бы ESC [
слишком неотзывчивым.
Теперь, терминалы, которые имеют PageUp, и т. д., также, как правило, имеют клавишу Leftи Right, которые также привязаны к left-scroll
, right-scroll
, поэтому вы можете использовать ее вместо этого для прокрутки.