як змусити менше пейджера відповідати на колесо прокрутки, а не очистити екран


13

Я знаю про відповіді, як, як зробити мишку-колесо-прокручування-менш-пейджер-використання-bash-and-gnome-термінал , який полягає у видаленні -Xпрапора зі змінної середовища $ LESS. Але я хотів би зробити те і інше :

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

Чи є спосіб, щоб я міг торт і з’їв його?

Відповіді:


18

Не обійшлося без злому вихідного коду. Трохи фонової історії:

Менше взагалі не може працювати з мишею (включаючи події прокрутки).

Емулятори терміналів підтримують так званий альтернативний екран. Це саме те, на що більшість додатків на повноекранному режимі перемикаються протягом їх тривалості (і повертаються до звичайного екрану, коли вони закриваються, спричиняючи «відновлення» попереднього вмісту), і він не має буфера прокрутки. Менше також перемикається на цей альтернативний екран, якщо тільки -Xне вказано, у цьому випадку він не працює.

Багато емуляторів терміналів з'ясували, що коли він перебуває в альтернативному режимі екрану, а програма, що працює всередині, не цікавиться подіями миші, має сенс перетворити прокрутку в події клавіш вгору або вниз. Це злом, і це було б шкідливо або на звичайному екрані (уявіть, що трапиться, наприклад, у вашому запиті оболонки), або коли програма хоче працювати з мишею (звичайно, вони повинні бачити фактичні події миші тоді). Але оскільки за замовчуванням жоден з цих двох не утримується під час запуску less, цей хак запускається (залежно від емулятора терміналу, який його підтримує, і він включений через \e[?1007hvs.\e[?1007l). Ваші події прокрутки перетворюються емулятором терміналу на клавіші вгору та вниз, і менше не можна відрізнити їх від фактичних натискань клавіш. Він не отримує подій прокрутки миші: він бачить натискання клавіш вгору та вниз.

Отже, ви перебуваєте: або ви переходите на альтернативний екран, і хак термінала перетворює події прокрутки в натискання клавіш на менше, і нормальний екран відновиться при виході з роботи; або ви цього не зробите, і тоді не може бути ніякого магічного перетворення подій прокрутки в натискання клавіш і менше не розуміє подій прокрутки.

Отже, що можна було зробити? Ну, або впроваджуйте підтримку миші менше, і нехай вона сама обробляє події прокрутки (і жити з нестандартним клацанням чи поведінкою копіювання та вставки), або впроваджуйте інший дивний хакер: після виходу, після повернення на звичайний екран, lessможна було б в останній раз надрукуйте скріншот вмісту, повторивши все, що було відображено перед тим, як ви вийшли з роботи.

На практиці це в основному зводиться до: вибачте, забудьте.


0

Мабуть, оновлення до менш ніж 530 або новіших отримає потрібну функцію,

http://www.greenwoodsoftware.com/less/news.530.html

Ці відмінності між версією 487 та версією 530:

Не виводите послідовність init терміналу, якщо на одному екрані використовується -F та файл.

Не знайшли жодного "менш" PPA, який має новішу версію, тому просто завантажте вихідний пакет та складіть локально та встановіть його.

і налаштувати git так:

git config --global core.pager 'less -F -S -R -i -+X'

додаткова інформація: Як використовувати "менше -F" без "-X", але все одно відображати вихід, якщо лише одна сторінка?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.