pager personalizado para o Git

1

Eu escrevi um script para exibir git diff . Será

  1. exibe a diferença em stdout se a saída couber na tela do terminal ou
  2. exibe a diferença no pager em contrário.

Meu script:

#!/bin/sh

if ! git diff "$@" > /dev/null; then
    # not in a Git repository
    exit 1
fi

if [ 'git diff "$@" | wc --lines' -gt 'tput lines' ]; then
    git diff "$@" --color=always | less
else
    git diff "$@" --color=always | cat
fi

As limitações atuais do script:

  1. Se eu precisar fazer o mesmo com git show ou git log , preciso escrever outros dois scripts semelhantes (que não é DRY).
  2. O preenchimento automático não funciona. Eu preciso escrever o meu próprio (demorando muito).

Agora eu desejo escrever um script que faça o mesmo, mas que funcione como um pager, para que eu possa definir a configuração do Git core.pager como o script e resolver o problema mencionado.

Nota: estou usando o Zsh.

atualizar

Eu tentei less --no-init --quit-if-one-screen ( less -FX ), e ele faz quase o que eu preciso, exceto que ele não limpará a tela no caso de mais de uma página. Então, na verdade eu preciso que a opção --no-init seja condicional: desative a inicialização e saia se ela se encaixar em uma tela; nenhuma ação especial em contrário. Talvez less --no-init-if-one-screen --quit-if-one-screen ?

    
por Franklin Yu 02.01.2016 / 13:27

0 respostas

Tags