Fazer dif. Usar largura total do terminal no modo lado a lado

40

A maioria das aplicações é inteligente ao usar toda a largura do terminal disponível. Meu shell sim, tela, vim, etc. No entanto, diffno modo lado a lado ( -y), não. Isso me irrita. Ele usa largura de 126 caracteres, que nem sequer é metade do meu terminal de largura de 270 blocos.

Olhar através da página de manual não revela nada de especial sobre o ajuste automático da largura, apenas a especificação manual via -W.

Existe talvez um "recurso oculto" diffpara permitir a expansão automática para toda a largura do terminal? Ou; Qual é o caminho mais fácil para inserir automaticamente -W <terminalsize>no meu comando diff sempre que o executo?

Estou no pressuposto de que anexar -W automaticamente a tudo não poderia prejudicar nada, porque isso sempre significa "usar colunas x $", que é sempre o que eu quero, esteja no modo lado a lado, ou então.

VxJasonxV
fonte

Respostas:

51
$ alias diff='diff -W $(( $(tput cols) - 2 ))'

deveria fazer isso. Você vai querer adicioná-lo ao ~ / .bashrc também.

A - 2é principalmente paranóia, no caso de algo expande o suficiente para fazer a quebra de linha (incorporado de largura dupla Unicode?); se você quiser, você pode simplesmente usar

$ alias diff='diff -W $(tput cols)'
geekosaur
fonte
Comecei a perceber $ COLUMNS e estava pensando algo da mesma maneira. alias diff = "diff -W $ {COLUMNS}". Acho que prefiro perguntar ao shell do que confiar no ambiente.
VxJasonxV
11
tputconsidera $COLUMNS, stty -ae a descrição do terminal, usando o primeiro daqueles que tem um valor significativo. eval $(resize)pode ser usado para forçá-los a estar sincronizados com o tamanho do terminal.
Geekosaur
Note que se você tiver tabstops fora do padrão (por exemplo, tabs 2em seu .bashrc), você também precisará usar o sinalizador -t ou diff irá produzir uma saída muito bizarra
Jeff