Dynamiczne formatowanie stron podręcznika na temat zmian wymiarów terminalowych

14

Jednym z moich typowych przepływów pracy jest otwieranie strony podręcznika w terminalu, a następnie innego terminala, w którym można przetestować. Strona podręcznika jest sformatowana do początkowych wymiarów pierwszego terminala. Kiedy teraz zmieniam rozmiar moich okien (lub każę mojej WM zrobić to dla mnie automatycznie), po prawej stronie wstępnie sformatowanej strony jest przerwa lub zawijanie się linii. W tym momencie zwykle q(uit) i !!(biegnę ponownie), co traci moją pozycję na stronie.

Zakładam, że proces formatowania wymaga dość dużej mocy obliczeniowej procesora, a może wywodzi się z czasów starożytnych o stałych rozmiarach terminali. lessPager dynamicznie reaguje na końcowych wydarzeniach rozmiaru, więc powinno być możliwe w teorii.

Próbowałem przeglądać strony podręcznika użytkownika, przeszukiwać Internet, pytać na IRC - cała ta sprawa - ale nie mogłem nic wymyślić.

  • Czy mogę uruchomić formatowanie z poziomu narzędzia man lub poza nim?

  • Czy istnieje wersja narzędzia man, która dynamicznie zmienia rozmiar strony?

  • Czy istnieje sposób dostosowania części procesu formatowania / wyświetlania, aby był aktualizowany SIGWINCH?

peth
źródło
manfaktycznie używa lessjako pager; możesz hwejść na stronę podręcznika, lessaby wyświetlić ekran pomocy. Nie jestem pewien, dlaczego dynamicznie nie zmienia rozmiaru stron
podręcznika
3
Wydaje się, że problem polega na tym, że manrenderuje dane wyjściowe na szerokość terminu. To, czego potrzebujesz, to pager, który może utworzyć zakładkę w miejscu, w którym znajduje się w dokumencie, ponownie uruchomić man (o czym tak naprawdę nie ma pojęcia, ponieważ jest do niego przesyłany) i powrócić do zakładki. Alternatywnie, nowe polecenie man, które zawiera pager.
nix

Odpowiedzi:

11

Podstawowym problemem jest to, że formatowanie jest wykonywane przez jeden program, a stronicowanie przez inny. Nawet jeśli formatyzator otrzyma sygnał zmiany rozmiaru okna i sformatuje tekst dla nowego rozmiaru okna, wszystko, co może zrobić, to przesłać nowy tekst w dół potoku do pagera. Pager nie ma pewności, która pozycja w nowym strumieniu odpowiada pozycji w starym strumieniu, który aktualnie wyświetlał.

Potrzebne jest, aby pager mógł dokonać ponownego formatowania. Jak powiedział @Robin Green, to HTML.

Jeśli chcesz korzystać z HTML, ale nadal pracujesz w terminalu, możesz powiedzieć, man(1)aby wyświetlać w HTML i wywołać przeglądarkę tekstową, aby go wyświetlić.

man -Hlynx man

Spowoduje to wyświetlenie strony man(1)man w przeglądarce tekstowej rysia. Lynx nie reaguje bezpośrednio na zmiany rozmiaru okna, ale możesz nacisnąć ctrl-R, a lynx ponownie renderuje stronę dla nowego rozmiaru okna.

Są dwie inne przeglądarki tekstowe, które znam: linki i elink. Możesz eksperymentować z tymi i rysiami i ustalić, które zapewniają najlepsze wrażenia podczas przeglądania stron podręcznika man. Możesz użyć niestandardowej konfiguracji tylko dla stron podręcznika i wywołać skrypt, który wywołuje przeglądarkę z tą konkretną konfiguracją.

Możesz wstawić opcje man do MANOPTzmiennej środowiskowej.

$ export MANOPT=-Hlynx
$ export MANOPT=-Hmanlynx # manlynx invokes lynx with a different configuration.

Będziesz musiał zainstalować groffpakiet, manaby móc generować HTML.

camh
źródło
Ograniczeniem -Hargumentu do człowieka jest to, że nie używa on serwera WWW, ale po prostu małego pliku. Chociaż pozwala to uniknąć problemów ze źle skonfigurowanymi zaporami ogniowymi, nie pozwala na generowanie hiperłączy do innych stron podręcznika (które obsługują przynajmniej niektóre skrypty man-> html innych firm).
Robin Green,
1
@Robin Green: Pytanie dotyczy obsługi stron podręcznika w oknach terminali o dużych rozmiarach. W tym kontekście nieużywanie serwera WWW nie jest ograniczeniem. Brak hiperłączy nie jest ograniczeniem, ponieważ wyświetlane strony podręcznika lessnie zawierają hiperłączy.
camh
To prawda, to z pewnością prawidłowa odpowiedź.
Robin Green,
4

Konwertuj strony podręcznika do formatu html w locie za pomocą odpowiedniego skryptu, takiego jak manserver , przeglądając je w przeglądarce internetowej (która może oczywiście być przeglądarką tekstową, taką jak lynx).

Jest to prawdopodobnie powód, dla którego nikt nie rozwiązał tego problemu - ponieważ problem stał się nieistotny przy opracowywaniu skryptów man-> html.

Robin Green
źródło