Reformatar dinamicamente as páginas de manual nas alterações de dimensão do terminal

14

Um fluxo de trabalho comum é abrir uma página de manual em um terminal e depois outro terminal para testar as coisas. A página do manual é formatada para as dimensões iniciais do primeiro terminal. Quando agora redimensiono minhas janelas (ou meu WM faz isso automaticamente), há um espaço à direita da página pré-formatada ou quebra de linhas. Neste ponto, normalmente q(uit) e !!(corro novamente), o que perde minha posição na página.

Suponho que o processo de formatação consome bastante CPU, ou talvez provenha de tempos antigos de tamanhos de terminais fixos. O lesspager reage dinamicamente a eventos de redimensionamento de terminais, portanto deve ser possível em teoria.

Tentei ler as páginas de manual, pesquisar na Web, perguntar no IRC - o lote todo -, mas não consegui pensar em nada.

  • Posso disparar a reformatação de dentro ou de fora do utilitário man?

  • Existe uma versão do utilitário man que redimensiona a página dinamicamente?

  • Existe uma maneira de personalizar parte do processo de formatação / exibição para atualizá-lo SIGWINCH?

peth
fonte
manrealmente usa lesscomo pager; você pode clicar hem uma página de manual para obter a lesstela de ajuda. Não sei por que ele não redimensiona dinamicamente as páginas de manual.
Michael Mrozek
3
O problema parece ser que manrenderiza a saída para a largura do termo. O que você precisa é de um pager que possa marcar onde você está no documento, reexecutar o man (sobre o qual ele realmente não tem idéia, pois está direcionado a ele) e retornar ao marcador. Como alternativa, um novo comando man que incorpora um pager.
Nix

Respostas:

11

O problema básico é que a formatação é feita por um programa e a paginação é feita por outro. Mesmo que o formatador receba um sinal de que o tamanho da janela foi alterado e reformate o texto para o novo tamanho da janela, tudo o que você pode fazer é alimentar o novo texto no pipeline para o pager. Não há como o pager saber com certeza qual posição no novo fluxo corresponde à posição no fluxo antigo que estava exibindo no momento.

O que você precisa é que o pager seja capaz de reformatar. Como o @Robin Green disse, isso é HTML.

Se você deseja usar HTML, mas ainda trabalha em um terminal, pode dizer man(1)para enviar em HTML e chamar um navegador em modo de texto para exibi-lo.

man -Hlynx man

Isso exibirá a página de man(1)manual no navegador de modo de texto do lynx. O Lynx não responde diretamente às alterações no tamanho da janela, mas você pode pressionar ctrl-R e o lynx renderizará novamente a página para o novo tamanho da janela.

Existem outros dois navegadores em modo de texto que conheço: links e elinks. Você pode experimentar esses e o lynx e determinar qual é a melhor experiência para navegar nas páginas de manual. Você pode usar uma configuração personalizada apenas para páginas de manual e chamar um script que chama o navegador com essa configuração específica.

Você pode colocar as opções de homem que desejar na MANOPTvariável de ambiente.

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

Você precisará instalar o groffpacote para manpoder gerar HTML.

camh
fonte
A limitação do -Hargumento para o homem é que ele não usa um servidor da Web, mas simplesmente um arquivo pequeno. Embora isso evite problemas com firewalls mal configurados, ele não permite a geração de hiperlinks para outras páginas do manual (que pelo menos alguns scripts de manual do homem-> html suportam).
Robin Green
1
@Robin Green: A questão é sobre o suporte às páginas de manual nas redimensionáveis ​​janelas dos terminais. Nesse contexto, não usar um servidor da web não é uma limitação. E não ter hiperlinks não é uma limitação, pois as páginas de manual exibidas em lessnão possuem hiperlinks.
Camh
Isso é verdade, é certamente uma resposta válida.
Robin Green
4

Converta as páginas de manual em html em tempo real usando um script adequado, como manserver , visualizando-as em um navegador da web (que pode ser um navegador da Web baseado em texto, como o lynx).

Provavelmente, é por isso que ninguém resolveu esse problema - porque o problema se tornou irrelevante com o desenvolvimento de scripts man-> html.

Robin Green
fonte