Como o “less” muda para o texto e depois volta para o prompt?

6

Quando executo less em algum arquivo, o prompt desaparece e recebo o conteúdo do arquivo na tela. Então, quando eu pressionar q , ele volta ao prompt. Eu acho que less faz isso salvando o buffer de terminal atual, abrindo um novo buffer, enviando o arquivo para o novo, então quando fechado, descartando o novo buffer, e restaurando o antigo, mas não sei o que este processo é chamado ou como isso acontece.

Eu procurei em man less mas não encontrei nada. Tentei pesquisá-lo, mas não consegui encontrar nada de útil, exceto que o comando screen pode fazer a mesma coisa com as sessões de shell.

Por fim, estou perguntando porque quero que git diff use um novo buffer em vez de imprimir inline. Eu já defini GIT_PAGER=less e git --paginate diff , mas eles não mudaram nada. E eu tenho uma solução alternativa, mas é um pouco longa: git diff --color=always | less -R

Atualização: após algumas pesquisas, parece que tput smcup e tput rmcup são comandos de alto nível para fazer a mesma coisa, provavelmente usando o pacote termcap .

    
por wjandrea 07.12.2017 / 22:00

1 resposta

4

Todas as funções de gerenciamento de tela de less estão em sua screen.c -X ou --no-init ), ele exibe sua sc_init string, que é termcap ' ti string ( inicialização do terminal comum ", que prepara o terminal para a operação de controle de cursor em tela cheia). Na saída, ele exibe sua sc_deinit string, que é termcap 's te string .

O comportamento que você está vendo é o comportamento padrão com git , se less não estiver configurado ( isto é, a variável LESS não está definida); quando esse for o caso, git corre less com as opções FRX , o que causa less para sair, se o conteúdo couber em uma única tela, exibir cores e pular a inicialização do terminal.

Para obter o comportamento desejado, defina LESS para -R ou defina a configuração core.pager git como algo como less -+X (consulte man git-config para obter detalhes).

    
por Stephen Kitt 07.12.2017 / 23:27