Como usar "less -F" sem "-X", mas ainda exibir a saída se houver apenas uma página?

11

Estou ajustando o pager do Git, mas tenho alguns problemas com ele.

O que eu quero é:

  1. Saída sempre colorida
  2. Rolagem por touchpad ou mouse
  3. Sair se uma tela

E minha configuração atual é:

$ git config --global core.pager
less -+F -+X -+S

Isso faz tudo, exceto o último.

Mas, se eu remover -+F, não haverá saída no caso de uma tela. Se eu remover -+Xtambém, a saída está de volta, mas não consigo rolar pelo touchpad less.

Existe uma solução alternativa que possa atender a todos os requisitos acima?

Frederick Zhang
fonte
Esta é uma questão muito interessante. Quando uso -F(saia de uma tela), sempre o faço em combinação com -X(desativar termcap init e de-init), mas, como você diz, isso não permite a rolagem com o mouse. (Eu duvido que a rolagem seja possível -X.) Modifiquei o título da pergunta, mas sinta-se à vontade para revertê-la se você sentir que ela perde muito significado. :)
Caractere curinga

Respostas:

8

ATUALIZAR

tl; dr Solução: atualize para menos 530

Em http://www.greenwoodsoftware.com/less/news.530.html :

Não imprima a sequência init do terminal se usar -F e o arquivo couber em uma tela.

Portanto, com essa correção, nem precisamos nos preocupar em determinar se devemos usar -Xpor conta própria, less -Fapenas cuida dela.

PS. Algumas outras configurações menos que eu uso:

export PAGER='less -F -S -R -M -i'
export MANPAGER='less -R -M -i +Gg'
git config --global core.pager 'less -F -S -R -i'
#alias less='less -F -S -R -M -i'

Acabei escrevendo um invólucro por conta própria.

#!/usr/local/bin/bash

# BSD/OSX compatibility
[[ $(type -p gsed) ]] && SED=$(type -p gsed) || SED=$(type -p sed)
CONTEXT=$(expand <&0)
[[ ${#CONTEXT} -eq 0 ]] && exit 0
CONTEXT_NONCOLOR=$( $SED -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" <<< "$CONTEXT")
LINE_COUNT=$( (fold -w $(tput cols) | wc -l) <<< "$CONTEXT_NONCOLOR" )

[[ $LINE_COUNT -ge $(tput lines) ]] && less -+X -+S -R <<< "$CONTEXT" || echo "$CONTEXT"

Usuários do BSD / OSX devem instalar manualmente gnu-sed. O incrível regexp, que ajuda a remover códigos de cores, é de /programming//a/18000433/2487227

Salvei esse script /usr/local/bin/pagere, em seguida,git config --global core.pager /usr/local/bin/pager

O tratamento para pacientes com TOC, viva!

Frederick Zhang
fonte
Não funcionará se o seu arquivo tiver linhas quebradas.
Thomas Dickey
@ThomasDickey Eu acho que folddeveria lidar com isso ... mas sim, erros talvez ... você poderia gentilmente dar um exemplo?
Frederick Zhang
@ThomasDickey paste.kde.org/ph9vl7es5 este funcionou para mim #
Frederick Zhang
foldrealmente não entende guias. Você pode consertá-lo usando expand. Isso ainda não manipula sequências de escape incorporadas (que geralmente são solicitadas no contexto de git).
Thomas Dickey
1
As guias só "funcionarão" quando a largura do terminal for um múltiplo das paradas de tabulação. Quando testei isso, notei que foldnão ajustava as linhas quebradas usando espaços, mas apenas encontrei o ponto mais próximo para cortar. Portanto, a aparência será enganosa.
Thomas Dickey
0

Eu uso o seguinte wrapper como meu pager. Não é tão chique quanto o outro wrapper mostrado aqui (porque sempre é usado less -Spara truncar linhas longas), mas é extremamente simples. Parece funcionar muito bem com o iTerm2.

#!/bin/bash
set -e

text=$(</dev/stdin)
text_lines=$(echo "${text}" | wc -l)
term_lines=$(tput lines)

if [[ $text_lines -lt $term_lines ]]; then
    echo "${text}"
else
    echo "${text}" | less -S -R
fi
superbatfish
fonte