jak sprawić, by mniej pager reagował na kółko przewijania i nie czyścił ekranu

13

Wiem o odpowiedziach takich jak: jak zrobić mysz-kółko-mysz-przewiń-mniej-pager-używając-bash-i-gnome-terminal , który ma usunąć -Xflagę ze zmiennej środowiskowej $ LESS. Ale chciałbym zrobić oba te:

  1. użyj kółka myszy, aby przewinąć pager (w przeciwieństwie do przewijania paska przewijania okna terminala) (które możesz uzyskać usuwając -X z $LESS)
  2. zawartość z pagera pozostaje na ekranie po zamknięciu (co zwykle osiąga się przez dodanie -X do $LESS).

Czy jest jakiś sposób, żeby mieć ciasto i je też zjeść?

Kevin G.
źródło

Odpowiedzi:

20

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 -Xpodano 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[?1007hvs.\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, lessmó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.

egmont
źródło
0

Najwyraźniej uaktualnienie do mniejszej 530 lub nowszej zapewni ci pożądaną funkcję,

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

Oto różnice między wersją 487 a wersją 530:

Nie wysyłaj sekwencji inicjującej terminala, jeśli używasz -F i plik pasuje na jeden ekran.

Nie znalazłem żadnych „mniej” PPA, które mają nowszą wersję, więc po prostu pobierz pakiet źródłowy i skompiluj lokalnie i zainstaluj go.

i skonfiguruj git w ten sposób:

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

więcej informacji: Jak używać „mniej -F” bez „-X”, ale nadal wyświetlać wyjście, jeśli tylko jedna strona?

Ted Feng
źródło
0

Naprawdę nie można używać kółka myszy do przewijania w mniejszej ilości pagera, ale można też kółka myszy przewijać zawartość za pomocą pagera w3m! w3m to „ pager do przeglądania WWW z doskonałą obsługą tabel / ramek ”, więc można go nawet używać jako przeglądarki internetowej konsoli. Co więcej, można używać w3m jako przeglądarki obrazów konsoli (nie działa ze wszystkimi emulatorami terminali, ale działa całkiem dobrze z xterm). w3m „ obsługuje tabele, ramki, połączenia SSL, obrazy kolorowe i wbudowane ”. Bardzo przydatna aplikacja! zrzut ekranu

ILUXA
źródło