Почему Esc-[ не выполняет прокрутку влево в `less`?

Это не зависит ни от разных версий arping, ни от сложных скриптов bash:

ping $(arp-scan --localnet | grep 80:1f:02:fa:90:b7  | awk ' { printf $1 } ')

Я использовал сканирование arp -вместо arp, так как оно работает намного быстрее.

2
27.11.2019, 20:14
1 ответ

Это потому, что ESC [также является началом последовательности символов, отправляемых несколькими функциональными клавишами на некоторых терминалах, таких как Home или End или PageUp ... Они также связаны с некоторым действием в less.

Таким образом, когда lessполучает ESC [, он ожидает еще (без тайм-аута, как это делают некоторые другие приложения ).

На моем терминале ESC[6~есть PageDown . Если я нажму Alt+[ , я увижу ESC [, как и вы. Но затем я могу ввести 6и ~, и это прокрутит вниз.

Если вы запустите TERM=vt100 lessвместо less, где на странице vt100terminfo нет записей для Home или End ... вы увидите ESC [работает.

Однако, если вы добавите \e[ left-scrollк вашему~/.lesskey(и запустите lesskey, чтобы скомпилировать его в ~/.less), вы заметите, что ESC [работает для прокрутки влево, но все Главная , PageUP ... перестают работать, все они прокручиваются влево, а дополнительные символы, которые они отправляют, вызывают звуковой сигнал.

Судя по коду, все дело в порядке обработки таблицы команд. Таблица команд ~/.lessдобавляется последней , но вставляется в начало , поэтому ее записи обрабатываются раньше встроенных.

При вводе ESC [, если запись для \e[ left-scrollнайдена первой, она обрабатывается, если первой найдена запись для \kD forw-screen(, которая на многих терминалах переводится как \e[6~ forw-screen), то это только префикс соответствует , аlessожидает ввода дополнительных данных .

Итак, это своего рода ошибка. Исправление будет заключаться в добавлении тайм-аута. Однако добавление короткого тайм-аута означало бы отказ от команд с несколькими клавишами -; длительный тайм-аут, чтобы дать пользователю достаточно времени для ввода команды с несколькими клавишами -, вероятно, сделал бы ESC [слишком невосприимчивым.

Теперь терминалы с PageUp и т. д.также обычно имеют левую и правую клавиши, которые также привязаны к left-scroll, right-scroll, поэтому вы можете использовать их вместо прокрутки.

3
27.01.2020, 22:08

Теги

Похожие вопросы