Estou em um terminal que suporta a tela alternativa usada por less, vim etc. para restaurar a exibição anterior depois de sair. Esse é um recurso interessante, mas realmente interrompe a --quit-if-one-screen
troca, less
pois, nesse caso, menos alterna para a tela alternativa, exibe seus dados, descobre que existe apenas uma tela e sai, levando o conteúdo da tela alternativa.
A solução comum sugerida é usar a --no-init
opção para evitar usar a tela alternativa completamente. No entanto, este é um pouco feio, porque eu não quero usá-lo em caso menos na verdade funciona como um pager. Portanto, estou procurando uma solução para usar a tela alternativa apenas se menos não terminar automaticamente.
Eu o usarei principalmente como pager do Git, portanto, um script de shell wrapper que roda apenas menos caso haja saída suficiente também seria bom. Pelo menos se não houver como fazê-lo sem um.
Respostas:
Desde menos 530 (lançado em dezembro de 2017),
less --quit-if-one-screen
não muda para a tela alternativa se ler menos de uma tela. Portanto, você não terá esse problema se sua versão do less for recente o suficiente.Nas versões anteriores, menos precisa decidir se deve usar a tela alternativa quando é iniciada. Você não pode adiar essa opção para quando ela terminar.
Você poderia ligar menos, deixá-lo usar a tela alternativa e colocar o conteúdo na tela principal se menos terminar automaticamente. No entanto, não conheço uma maneira de detectar o encerramento automático.
Por outro lado, não é tão difícil chamar cat para entradas curtas e menos para entradas maiores, mesmo preservando o buffer, para que você não precise esperar que toda a entrada comece a ver as coisas em menos (o buffer pode ser um pouco maior - você não verá nada até ter pelo menos uma tela cheia de dados - mas não muito mais.
Você pode preferir ver as linhas na tela principal quando elas entram e alternar para a tela alternativa se as linhas causarem rolagem.
fonte
$n
)#!/bin/bash
seu script, pois está usando a construção específica do bash, pois seu script não funcionará em sistemas (como o Ubuntu) onde/bin/sh
não é o bash.less
também pode (mas não) ter uma maneira opcional de sair, onde imprime o conteúdo atual da tela após o envio da string un-init. Portanto, você pode ter o benefício de que a tela alternativa não atrapalhe a rolagem, mas ainda deixe a parte relevante da página de manual ou qualquer outra coisa no terminal após sair.O GNU less v. 530 incorpora o patch do Fedora referido por @ paul-antoine-arras e não exibirá mais a sequência de inicialização do terminal quando
--quit-if-one-screen
for usada e a entrada se encaixar em uma tela.fonte
brew install less
, e ter certeza que$LESS
tem F e omite X.Para entradas lentas, como
git log -Gregex
, você deseja:A) as linhas aparecerão na tela principal assim que entrarem e, em seguida, alternar para a tela alternativa assim que a rolagem for necessária (para que a primeira
$LINES
saída sempre apareça na sua rolagem); Nesse caso, vá com a segunda das respostas de Gilles .B) linhas para aparecer na tela alternativa, mas saia da tela alternativa e imprima as linhas na tela principal se a rolagem for desnecessária (para que nenhuma saída apareça na sua rolagem se for necessária rolagem); Nesse caso, use o script abaixo:
É
tee
a entrada para um arquivo temporário e, uma vez queless
sai,cat
é o arquivo temporário se contiver menos linhas que a altura da tela:Use-o com
export PAGER='/path/to/script'
. Isso deve ser suficiente paragit
usá-lo, a menos que você já tenha substituídocore.pager
.Para possíveis aprimoramentos, consulte também minha versão um pouco mais detalhada deste script em: https://github.com/johnmellor/scripts/blob/master/bin/least
fonte
Isso foi resolvido há muito tempo nas distribuições baseadas no Red Hat, modificando o comportamento da opção -F no
less
código-fonte: veja este patch do Projeto Fedora, cuja primeira versão remonta a 2008. A idéia é simplesmente obter a altura do terminal (ou seja, o número máximo de linhas que podem ser exibidas ao mesmo tempo) e para omitir as seqüências de inicialização e desinicialização quando o arquivo se encaixa em uma tela. Portanto, não é necessário usar a opção -X e -F de forma consistente, independentemente do tamanho do arquivo.fonte