Как заставить пейджер меньше реагировать на колесо прокрутки и не очищать экран
Я знаю о таких ответах, как " сделать-мышь-колесо-прокрутить-меньше-пейджер-используя-bash-and-gnome-терминал", который должен удалить -X
флаг из переменной окружения $LESS. Но я хотел бы сделать оба из этих:
- используйте колесо мыши для прокрутки пейджера (в отличие от прокрутки полосы прокрутки окна терминала) (которую вы получите, удалив
-X
от$LESS
) - оставить содержимое пейджера на экране после выхода (что обычно достигается добавлением
-X
в$LESS
).
Можно ли как-нибудь съесть свой пирог и съесть его?
3 ответа
Не без взлома исходного кода. Немного предыстории:
Less не может обрабатывать мышь (включая события прокрутки) вообще.
Эмуляторы терминала поддерживают так называемый альтернативный экран. Это то, к чему большинство полноэкранных приложений переключаются на время (и возвращаются к обычному экрану при выходе, вызывая "восстановление" предыдущего содержимого), и у него нет буфера обратной прокрутки. Менее также переключается на этот альтернативный экран, если -X
дается в этом случае это не так.
Многие эмуляторы терминала понимали, что когда он находится в режиме альтернативного экрана и приложение, работающее внутри, не заинтересовано в событиях мыши, имеет смысл преобразовать прокрутку в события нажатия клавиши "Вверх" или "Вниз". Это взлом, и он будет вреден либо на обычном экране (представьте, что произойдет, например, по приглашению вашей оболочки), либо когда приложение захочет обработать мышь (конечно, тогда они должны увидеть реальные события мыши). Но так как по умолчанию ни один из этих двух не держится, когда вы работаете less
, этот хак вступает в силу (при условии, что эмулятор терминала поддерживает его и включается через \e[?1007h
против \e[?1007l
). Ваши события прокрутки преобразуются эмулятором терминала в нажатия клавиш "Вверх" и "Вниз", и меньше их нельзя отличить от фактических нажатий клавиш. Он не получает события прокрутки мыши: он видит нажатия клавиш "Вверх" и "Вниз".
Итак, вы: Либо вы переключаетесь на альтернативный экран, и хак терминала преобразует события прокрутки в нажатия клавиш за меньшие деньги, и нормальный экран восстанавливается при выходе; или нет, и тогда не может быть никакого волшебства, преобразующего события прокрутки в нажатия клавиш, и меньше не понимает события прокрутки.
Так что же можно сделать? Хорошо, либо реализуйте поддержку мыши в меньшем количестве, и пусть она сама обрабатывает события прокрутки (и работает с поведением щелчка по умолчанию или копированием-вставкой), либо реализует другой странный взлом: при выходе, после возврата к нормальному экрану, less
может в последний раз напечатать скрин с контентом, повторяя все, что было показано перед выходом.
На практике все сводится к следующему: извините, забудьте об этом.
Видимо, обновление до менее 530 или более поздней версии даст вам желаемую функцию,
http://www.greenwoodsoftware.com/less/news.530.html
Это различия между версией 487 и версией 530:
Не выводить последовательность инициализации терминала, если используется -F и файл помещается на одном экране.
Не удалось найти "менее" PPA с более новой версией, поэтому просто скачайте пакет с исходным кодом, соберите его и установите локально.
и настройте git так:
git config --global core.pager 'less -F -S -R -i -+X'
больше информации: Как использовать "less -F" без "-X", но при этом отображать вывод только на одной странице?
На самом деле невозможно использовать колесо мыши для прокрутки пейджера less, но можно использовать колесо мыши для прокрутки содержимого с помощью пейджера w3m! w3m — это « просматриваемый WWW-пейджер с отличной поддержкой таблиц/фреймов », поэтому его даже можно использовать в качестве консольного веб-браузера. Более того, w3m можно использовать в качестве средства просмотра изображений консоли (работает не со всеми эмуляторами терминала, но с xterm работает очень хорошо).w3m « имеет поддержку таблиц, фреймов, SSL-соединений, цветных и встроенных изображений ». Очень полезное приложение!Скриншот