10

Я знаю об ответах типа « как сделать мышь-колесо-прокрутить-меньше-пейджер-используя-bash-and-gnome-терминал», которая заключается в удалении флага -X из переменной среды $ LESS. Но я хотел бы сделать оба из этих:

  1. используйте колесо мыши для прокрутки пейджера (в отличие от прокрутки полосы прокрутки окна терминала) (которую вы получите, удалив -X из $LESS)
  2. оставьте содержимое пейджера на экране после выхода (что обычно достигается добавлением -X к $LESS).

Можно ли как-нибудь съесть свой пирог и съесть его?

1 ответ1

16

Не без взлома исходного кода. Немного предыстории:

Less не может обрабатывать мышь (включая события прокрутки) вообще.

Эмуляторы терминала поддерживают так называемый альтернативный экран. Это то, к чему большинство полноэкранных приложений переключаются на время (и возвращаются к обычному экрану при выходе, вызывая "восстановление" предыдущего содержимого), и у него нет буфера обратной прокрутки. Less также переключается на этот альтернативный экран, если только в этом случае не указано -X .

Многие эмуляторы терминала понимали, что когда он находится в режиме альтернативного экрана и приложение, работающее внутри, не заинтересовано в событиях мыши, имеет смысл преобразовать прокрутку в события нажатия клавиши «Вверх» или «Вниз». Это взлом, и он будет вреден либо на обычном экране (представьте, что произойдет, например, по приглашению вашей оболочки), либо когда приложение захочет обработать мышь (конечно, тогда они должны увидеть реальные события мыши). Но поскольку по умолчанию ни один из этих двух вариантов не работает, когда вы выполняете less , этот хак срабатывает (при условии, что эмулятор терминала поддерживает его и включается через \e[?1007h против \e[?1007l). Ваши события прокрутки преобразуются эмулятором терминала в нажатия клавиш «Вверх» и «Вниз», и меньше их нельзя отличить от фактических нажатий клавиш. Он не получает события прокрутки мыши: он видит нажатия клавиш «Вверх» и «Вниз».

Итак, вы: Либо вы переключаетесь на альтернативный экран, и хак терминала преобразует события прокрутки в нажатия клавиш за меньшие деньги, и нормальный экран восстанавливается при выходе; или нет, и тогда не может быть никакого волшебства, преобразующего события прокрутки в нажатия клавиш, и меньше не понимает события прокрутки.

Так что же можно сделать? Что ж, либо реализуйте поддержку мыши в меньшем количестве, и пусть она сама обрабатывает события прокрутки (и работает с помощью щелчка по умолчанию или поведения копирования-вставки), либо реализует другой странный взлом: при выходе из системы, после возврата к обычному экрану, less может для последнего время напечатать экран содержимого, повторяя все, что было отображено до выхода.

На практике все сводится к следующему: извините, забудьте об этом.

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