Hacer diff Usar ancho de terminal completo en modo de lado a lado

40

La mayoría de las aplicaciones son inteligentes sobre el uso de todo el ancho del terminal disponible para ellos. Mi shell sí, pantalla, vim, etc. Sin embargo, diffen modo de lado a lado ( -y), no. Esto me enoja. Utiliza un ancho de 126 caracteres, que ni siquiera es la mitad de mi terminal de 270 bloques de ancho.

Mirar a través de la página de manual no revela nada en particular sobre el ajuste automático del ancho, solo especificando manualmente a través de -W.

¿Existe quizás una "característica oculta" diffpara permitir que se expanda automáticamente a todo el ancho del terminal? O; ¿Cuál es la ruta más fácil de insertar automáticamente -W <terminalsize>en mi comando diff cada vez que lo ejecuto?

Supongo que agregar automáticamente -W a todo no podría dañar nada, porque solo significará "usar columnas $ x", que siempre es lo que quiero, ya sea que esté en modo de lado a lado, o de otro modo.

VxJasonxV
fuente

Respuestas:

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

Debería hacerlo. También querrás agregarlo a ~ / .bashrc.

Esto - 2es principalmente paranoia, en caso de que algo (¿Unicode incrustado de doble ancho?) Se expanda lo suficiente como para hacer que la línea se ajuste; si quieres, puedes usar

$ alias diff='diff -W $(tput cols)'
geekosaur
fuente
Comencé a notar $ COLUMNS y estaba pensando en algo similar. alias diff = "diff -W $ {COLUMNS}". Sin embargo, creo que preferiría preguntar al shell en lugar de confiar en el medio ambiente.
VxJasonxV
1
tputconsidera $COLUMNS, stty -ay la descripción del terminal, usando el primero de los que tiene un valor significativo. eval $(resize)puede usarse para forzarlos a estar sincronizados con lo que el terminal cree que es su tamaño.
geekosaur
tenga en cuenta que si tiene tabstops no estándar (por ejemplo, tabs 2en su .bashrc) también necesitará usar el indicador -t o diff para producir resultados muy extraños
Jeff