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