Como posso manter o conteúdo que estava lendo do homem depois de sair?

24

Então, usamos man whateverpara obter o uso e outras informações sobre o whatevercomando. Quando a seção relevante é encontrada, gostaria de sair do mancomando com as informações deixadas na tela. Para que eu possa digitar o próximo comando com o árbitro acima. Mas o mancomando fecha a tela inteira para recuperar a tela antiga semelhante a vim. Existe uma maneira de conseguir isso?

NathaneilCapital
fonte
Todas as sugestões são boas, mas você também pode abrir uma segunda janela para visualizar a página do manual. E provavelmente também há visualizadores de páginas de manual da GUI.
Barmar

Respostas:

38

Eu acredito que isso não é tanto sobre mansi mesmo, mas sobre o seu pager de escolha ( PAGERvariável de ambiente) combinado com o terminal em uso.

Eu estou supondo que seu pager é provavelmente less(pager padrão típico hoje em dia e se encaixa com a descrição).

lesstem uma opção -Xque pode lhe proporcionar um comportamento semelhante ao que você está procurando.

   -X or --no-init
          Disables sending the termcap initialization and deinitialization
          strings  to  the  terminal.   This is sometimes desirable if the
          deinitialization string does something unnecessary, like  clear‐
          ing the screen.

Por exemplo, PAGER="less -X" man manpoderia ser usado para testá-lo e, se você achar esse comportamento preferível, considere definir PAGEResse valor permanentemente.

Håkan Lindqvist
fonte
Infelizmente, isso atrapalha o histórico de rolagem.
musikk
bem @musiKk funciona para mim no Ubuntu 16.04 com um terminal inteligente unicode (não o console Linux) eo homem 2.7.5
cat
3
@musiKk: se você quiser voltar à página de manual depois de sair do pager, terá que limitar-se a avançar na página de manual (por linhas ou páginas), não o acesso aleatório usual.
Peter Cordes
1
Ou você pode usar LESS=-X, para evitar ter de mudança PAGER(eu não 100% confiar que ele funcione em todos os programas com um espaço como esse, embora ele funciona no homem.)
Random832
11

Se você estiver executando menos como seu pager (o que é muito comum), não precisará modificar o pager, apenas faça o redirecionamento de E / S:

man <whatever you want to man> | cat -

Isso imprimirá uma cópia no terminal para que você possa rolar para cima quando precisar.

Brennen Smith
fonte
1
Um problema dessa abordagem é que, com longas páginas de manual, pode ser difícil voltar para a parte de seu interesse e você não verá essa parte e a linha de comando atual.
Jlliagre
Nenhuma das outras sugestões supera esse problema - é apenas inerente a uma única janela do console. Mas com isso dito, você sempre pode escrever seu comando, rolar um pouco para cima e voltar ao seu comando meio escrito.
Brennen Smith
Minha sugestão definitivamente supera esse problema. Você deixa o comando man quando a página de manual que lhe interessa está na tela e pode digitar seu comando com essa página ainda visível na mesma tela.
Jlliagre
2
-significa padrão no mas catassume que de qualquer maneira
loa_in_
1
É principalmente para semântica - eu sempre gosto de ser explícito com o stdin.
Brennen Smith
5

Como não apenas lessmas também outras aplicações de texto como vimexibem o mesmo recurso extremamente irritante, o que faço é simplesmente remover a capacidade do terminal de suportar os comandos envolvidos no terminfobanco de dados.

Esses comandos são smcupe rmcup, que foram projetados para permitir a ativação e a movimentação onde o cupcomando (posição do cursor) foi permitido.

Aqui está uma função de shell que eu usei para automatizar a tarefa, ela funciona pelo menos com Solaris e provavelmente com a maioria das distribuições Linux:

fixterminfo()
{
  (
    [[ ! -d /tmp/terminfo ]] && { mkdir /tmp/terminfo || return ; }
    cd /tmp/terminfo || return
    TERM=xterm infocmp > xterm.src.org
    sed -e 's/rmcup=[^,]*,//'  -e 's/smcup=[^,]*,//' xterm.src.org > xterm.src
    if diff xterm.src.org xterm.src
    then
      echo xterm terminfo already patched
      return
    fi
    TERMINFO=/tmp/terminfo tic xterm.src
    if [ -f /usr/share/lib/terminfo/x/xterm ] ; then
      XTERM=/usr/share/lib/terminfo/x/xterm
    else
      if [ -f /lib/terminfo/x/xterm ] ; then
        XTERM=/lib/terminfo/x/xterm
      else
        if [ -f /usr/share/terminfo/x/xterm ] ; then
          XTERM=/usr/share/terminfo/x/xterm
        else
          echo xterm terminfo not found ; return
        fi
      fi
    fi
    if [ ! -f ${XTERM}.org ]
    then
      sudo cp ${XTERM} ${XTERM}.org || return
    fi
    cat /tmp/terminfo/x/xterm | sudo dd of=${XTERM}
  )
}

Se a entrada do seu terminal não der fallback xterm, substitua xtermpelo nome do terminal correto no script.

jlliagre
fonte
1
Sim, mas, em seguida, isso quebra outros programas (não necessariamente pagers ou maldições, mas readline-like editores etc)
cat
1
@cat Não que eu verifiquei qualquer um existente, mas nunca notei problemas com outros programas depois de usar esta solução alternativa. Você tem exemplos de programas que se comportariam de maneira estranha? Eu também suspeito que se eles falharem, isso é um problema do lado deles. Um emulador de terminal não deve suportar todos os recursos terminfo disponíveis. Ele apenas anuncia quais são compatíveis e cabe ao aplicativo lidar com isso.
Jlliagre
3

Você pode canalizar a saída para o catcomando

man man|cat

ou use-o em vez do pager padrão, como neste exemplo, que invoca o homem em si:

PAGER=cat man man
SimoneLazzaris
fonte
2

Sem modificar o pager, uma solução com pipes que podem funcionar na maioria dos ambientes:

Exemplos para man ls

  • Deixe a página de manual inteira na telaman ls | cat
  • Ler um paginado homem de saída, com a possibilidade de deixá-lo a qualquer momento com q :man ls | more
  • filtre o conteúdo do homem com um padrão e mantenha as linhas correspondentes na tela:man ls | grep somestring
marcanuy
fonte
-3

Em 2016, basta abrir um segundo terminal ou guia ou janela ou ler o manual online.

user362328
fonte
E esta é a solução prática óbvia.
Braiam
1
@Braiam Não é prático se o terminal estiver na tela do telefone móvel.
NataliailCapital
@NathaneilCapital Parece que é hora de aprender o tmux.
Michael Hampton
-3

Mesmo nos meus servidores (FreeBSD) eu instalo o X e o xfce. Em seguida, aloco um grande buffer (por exemplo, 10.000 linhas) para os emuladores de terminal, para que eu possa rolar completamente a página de manual em um deles e usar uma instância de terminal separada para montar o comando. Funciona um prazer.

MMacD
fonte