Riformattazione dinamica delle pagine man sui cambiamenti delle dimensioni dei terminali


14

Un mio flusso di lavoro comune è quello di aprire una pagina di manuale in un terminale, quindi un altro terminale in cui testare le cose. La pagina man è formattata in base alle dimensioni iniziali del primo terminale. Quando ora ridimensiono le mie finestre (o faccio in modo che il mio WM lo faccia automaticamente per me), c'è uno spazio a destra della pagina preformattata o il ritorno a capo. A questo punto di solito q(uit) e !!(corro di nuovo), che perde la mia posizione nella pagina.

Suppongo che il processo di formattazione richieda un uso intensivo della CPU, o forse deriva da tempi antichi di dimensioni fisse dei terminali. Il lesscercapersone reagisce dinamicamente agli eventi di ridimensionamento terminale, quindi dovrebbe essere possibile in teoria.

Ho provato a sfogliare le pagine man, a cercare sul Web, a chiedere su IRC - tutto il resto - ma non sono riuscito a trovare nulla.

  • Posso attivare la riformattazione all'interno o all'esterno dell'utilità man?

  • Esiste una versione dell'utilità man che ridimensiona la pagina in modo dinamico?

  • Esiste un modo per personalizzare una parte del processo di formattazione / visualizzazione per aggiornarlo SIGWINCH?


manutilizza effettivamente lesscome cercapersone; puoi premere huna pagina man per ottenere la lessschermata di aiuto. Non sono sicuro del motivo per cui non ridimensiona dinamicamente le pagine man
Michael Mrozek

3
Il problema sembra essere il manrendering dell'output alla larghezza del termine. Ciò di cui hai bisogno è un cercapersone in grado di aggiungere ai segnalibri la posizione in cui ti trovi nel documento, rieseguire man (cosa di cui non ha davvero idea da quando è stato reindirizzato) e tornare al segnalibro. In alternativa, un nuovo comando man che incorpora un cercapersone.
nix,

Risposte:


11

Il problema di base è che la formattazione viene eseguita da un programma e il paging viene eseguito da un altro. Anche se il formatter dovesse ottenere un segnale che la dimensione della finestra è cambiata e riformattare il testo per la nuova dimensione della finestra, tutto ciò che può fare è inviare nuovo testo lungo la pipeline al cercapersone. Non è possibile che il cercapersone sappia con certezza quale posizione nel nuovo stream corrisponde alla posizione nel vecchio stream che stava visualizzando.

Ciò di cui hai bisogno è che il cercapersone sia in grado di eseguire la riformattazione. Come ha detto @Robin Green, questo è HTML.

Se vuoi usare l'HTML ma lavori ancora in un terminale, puoi dire man(1)all'output in HTML e chiamare un browser in modalità testo per visualizzarlo.

man -Hlynx man

Verrà visualizzata la man(1)manpage nel browser in modalità testo di lynx. Lynx non risponde direttamente alle modifiche alle dimensioni della finestra, ma è possibile premere ctrl-R e lynx eseguirà nuovamente il rendering della pagina per le nuove dimensioni della finestra.

Ci sono altri due browser in modalità testuale che conosco: collegamenti ed elink. Potresti sperimentare quelli e la lince e determinare quale ti dà la migliore esperienza per sfogliare le pagine man. Potresti voler usare una configurazione personalizzata solo per le pagine man e invocare uno script che richiama il browser con quella configurazione specifica.

Puoi inserire le opzioni man che ti piacciono nella MANOPTvariabile d'ambiente.

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

Dovrai installare il groffpacchetto per manpoter generare HTML.


Il limite -Hdell'argomento all'uomo è che non usa un server web, ma semplicemente un piccolo file. Sebbene ciò eviti qualsiasi problema con i firewall non configurati correttamente, non consente la generazione di collegamenti ipertestuali ad altre pagine man (che almeno alcuni script man-> html di terze parti supportano).
Robin Green,

1
@Robin Green: la domanda riguarda il supporto di pagine man in finestre terminali ridimensionabili. In quel contesto non usare un server web non è una limitazione. E non avere collegamenti ipertestuali non è una limitazione, poiché le pagine man visualizzate in lessnon hanno collegamenti ipertestuali.
Camh,

È vero, è sicuramente una risposta valida.
Robin Green,

4

Converti le pagine man in html al volo usando uno script adatto come manserver , visualizzandole in un browser Web (che può ovviamente essere un browser Web testuale come la lince).

Questo è presumibilmente il motivo per cui nessuno ha risolto questo problema, perché il problema è diventato irrilevante con lo sviluppo di script man-> html.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.