Faça menos uso de tela alternativa, mas somente se o arquivo inteiro não couber em uma tela

0

Eu gostaria que less fosse encerrado imediatamente se o arquivo inteiro pudesse ser exibido em uma tela. Para isso, eu usaria a opção -F :

-F or --quit-if-one-screen

    Causes less to automatically exit if the entire file can be
    displayed on the first screen.

A pegadinha: quando o arquivo tiver mais de uma tela, eu gostaria de poder usar a tela alternativa. Como tal, não quero passar -X :

-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
    clearing the screen.

Observe que, se você definir -F sem -X , fazer less some-short-file não produzirá nenhuma saída visível, porque aparecerá somente na tela alternativa, que desaparece assim que less sair, o que é imediatamente. / p>

Por que eu quero isso: Eu tenho as ligações do tmux configuradas de modo que eu possa rolar com o mousewheel quando no modo de tela alternativo (ou seja, em less e em coisas que o usam como pager: git , ack , ag , man etc).

Perguntando se tenho que substituir less por algum script ou função de wrapper que verifique a altura da tela e condicionalmente decida se invocará less -FX ou less ou se isso seria complicado demais para ser implementado ao ler a partir de um pipe (caso em que pode ter que fazer algo mais simples, como padrão para less ).

    
por wincent 28.10.2015 / 01:54

1 resposta

1

A pergunta parece conter todas as informações relevantes. Um script de wrapper simples seria parecido com isto:

#!/bin/bash
if [ -t 0 && $# = 1 ]
then
    want=$(wc -l "$1" |sed -e 's/[[:space:]].*//')
    have=$(stty -a |grep -E " rows [[:digit:]]" | sed -e 's/^.* rows //' -e 's/;.*//')
    if [ $want -le $have ]
    then
        less -FX "$1"
    else
        less "$1"
    fi
else
    less "$1"
fi

que verifica se a entrada padrão é um terminal e, em caso afirmativo, conta o número de linhas no arquivo, comparando-o com o número na tela. Opções de manuseio complicariam as coisas, é claro.

Alguém pode postar um script mais conciso; isso funciona em um teste rápido aqui.

    
por 28.10.2015 / 09:31