Nie bez włamywania się do kodu źródłowego Lessa. Trochę historii w tle:
Mniej w ogóle nie obsługuje myszy (w tym zdarzeń przewijania).
Emulatory terminali obsługują tak zwany ekran alternatywny. Do tego przełącza się większość aplikacji pełnoekranowych na czas ich trwania (i wracają do normalnego ekranu, gdy wychodzą, powodując „przywrócenie” poprzedniej zawartości) i nie ma bufora przewijania. Mniej przełącza się również na ten alternatywny ekran, chyba że -X
podano inaczej.
Wiele emulatorów terminali zorientowało się, że gdy jest w trybie alternatywnego ekranu, a aplikacja działająca wewnątrz nie jest zainteresowana zdarzeniami myszy, sensowne jest przekształcenie przewijania w zdarzenia naciśnięcia klawisza w górę lub w dół. Jest to hack i byłoby szkodliwe albo na normalnym ekranie (wyobraź sobie, co by się stało, np. Po wyświetleniu monitu powłoki), albo gdy aplikacja zechce obsłużyć mysz (jasne, wtedy muszą zobaczyć rzeczywiste zdarzenia myszy). Ale ponieważ domyślnie żadne z tych dwóch nie blokuje się podczas działania less
, hack uruchamia się (pod warunkiem, że obsługuje go emulator terminala i jest włączony przez \e[?1007h
vs.\e[?1007l
). Twoje zdarzenia przewijania są konwertowane przez emulator terminala na naciśnięcia klawiszy w górę i w dół, a mniej nie może ich odróżnić od faktycznych naciśnięć klawiszy. Nie odbiera zdarzeń przewijania myszą: widzi naciśnięcia klawiszy w górę i w dół.
A więc oto jesteś: albo przełączysz się na alternatywny ekran, a hack terminalu zamieni zdarzenia przewijania w naciśnięcia klawiszy za mniej, a normalny ekran zostanie przywrócony po wyjściu; albo nie, a wtedy nie będzie żadnej magicznej konwersji zdarzeń przewijania na naciśnięcia klawiszy, a mniej nie rozumie zdarzeń przewijania.
Co więc można zrobić? Cóż, albo zaimplementuj obsługę myszy w mniejszym zakresie i pozwól sobie obsługiwać zdarzenia przewijania (i żyj z nienagannym zachowaniem kliknięcia lub kopiuj-wklej), lub zaimplementuj kolejny dziwny hack: po wyjściu, po powrocie do normalnego ekranu, less
mógł po raz ostatni wydrukuj zawartość ekranu, powtarzając wszystko, co było wyświetlane przed wyjściem.
W praktyce sprowadza się do: przepraszam, zapomnij.