Pode 'menos-F' ser utilmente combinado com a inicialização do termcap?

6

less -F fecha menos se o conteúdo couber em uma tela. No entanto, se eu usar a inicialização termcap, ou seja, eu não uso use -X e o arquivo se encaixa na tela, nada é impresso porque menos exibe o conteúdo, avisos que eles ajustam na tela, sai e limpa a tela durante a desinicialização.

Isso pode ser demonstrado da seguinte forma (assume vazio LESS variable):

$ echo foo > new_file
$ cat new_file
foo
$ less -X -F new_file
foo
$ less -F new_file
$

Eu gosto de recursos termcap, ele permite a rolagem com a roda do mouse entre outras coisas, então eu definitivamente não quero usar -X . Ainda há uma maneira de ter menos desistir se o conteúdo couber na tela (e basicamente se comportar como cat )?

    
por musiKk 13.11.2014 / 12:14

2 respostas

5

Veja um trecho relevante da less 'FAQ :

Can less leave the screen alone when it quits?

When less starts, it sends the "ti" termcap string to the terminal, and when it quits, it sends the "te" string. Exactly what the "te" string does depends on the system you are using, the type of terminal, and your version of termcap. On some systems, it does nothing; on others it restores the screen to the state it was in when less started, thus erasing from the screen the last page of the file which less was viewing.

If you don't like the behavior of "te" on your system, you can disable the sending of the "ti" and "te" strings by invoking less with the -X option. Unfortunately, this sometimes has other side effects, because the "ti"/"te" strings might do other things that are required. For example, on some terminals, disabling "ti" and "te" causes arrow keys to cease to function.

If you want "te" to do something different (for example, restore the screen if it's not doing that already), you'll have to figure out how to change the termcap or terminfo for your terminal on your system. Unfortunately, this is done differently on different systems, so you'll have to check the documentation for your system.

A pesquisa leva às capacidades de termcap do "ti" e "te" sendo nomeadas "smcup" e "rmcup" no terminfo, que é um termo mais moderno equivalente.

Você pode ver como seu terminal ( $TERM , provavelmente xterm ) está configurado com:

infocmp -1  # which will print out capabilites one per line

Você pode decifrar o significado das sequências com a ajuda de uma referência dos caracteres de controle do VT100 .

Se você remover os recursos "smcup" e "rmcup" do seu terminal:

infocmp -1 | sed -r '/[sr]mcup.*/d' > new-terminfo-for-$TERM

e, em seguida, deixe a biblioteca terminfo saber que esta é a nova especificação de capacidade preferida para $ TERM,

tic new-terminfo-for-$TERM
# you reverse this with 'rm -ri ~/.terminfo'

você notará que a tela alternativa less ' não está mais limpa (porque nunca foi inserida). Mas o mouse não funciona mais .

Se você mexer com sequências de caracteres de controle "rmcup" e descobrir, por favor me avise!

Atualização:

Uma alternativa de trabalho é envolver menos como uma função que executa cat quando o arquivo se ajusta à altura do terminal (coloque isso em seu .bashrc ):

less () {
    # When single file argument, and file small enough, cat it
    if [ $# = 1 ] && [ -f "$1" ] && [ $(wc -l "$1" | cut -d' ' -f1) -le $((${LINES:-0} - 3)) ]; then
        cat "$@"
    else
        command less "$@"
    fi
}
    
por 08.02.2015 / 18:33
1

Para entradas lentas, como git log -Gregex , você quer:

A) Linhas a aparecer no ecrã principal à medida que entram e, em seguida, mudar para o ecrã alternativo, uma vez que é necessário efectuar a rolagem (para que o primeiro $LINES da saída apareça sempre no seu deslocamento); se assim for, vá com o segundo de as respostas de Gilles a uma pergunta semelhante .

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 (assim nenhuma saída aparecerá na sua rolagem se a rolagem for necessária); em caso afirmativo, consulte minha resposta a uma pergunta semelhante .

    
por 23.05.2015 / 21:06

Tags