Rendi diff Usa la larghezza completa del terminale in modalità affiancata


40

La maggior parte delle applicazioni è intelligente sull'uso dell'intera larghezza del terminale disponibile. La mia shell fa, schermo, vim, ecc. Tuttavia, diffin modalità side-by-side ( -y), non lo fa. Questo mi fa arrabbiare. Utilizza una larghezza di 126 caratteri, che non è nemmeno la metà del mio terminale di larghezza a 270 blocchi.

Guardare attraverso la pagina man non rivela nulla di particolare sulla regolazione automatica della larghezza, specificandola solo manualmente tramite -W.

Esiste forse una "funzione nascosta" diffper consentire l'espansione automatica dell'intera larghezza del terminale? O; Qual è il percorso più semplice da inserire automaticamente -W <terminalsize>nel mio comando diff ogni volta che lo eseguo?

Sono convinto che l'aggiunta automatica di -W a tutto non possa far male a nulla, perché significherà sempre "utilizzare $ x colonne", che è sempre quello che voglio, sia che io sia in modalità side-by-side, o altrimenti.

Risposte:


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

dovrebbe farlo. Ti consigliamo di aggiungerlo anche a ~ / .bashrc.

Si - 2tratta principalmente di paranoia, nel caso in cui qualcosa (Unicode a doppia larghezza incorporato?) Si espanda abbastanza per avvolgere la linea; se vuoi, puoi semplicemente usare

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

Ho iniziato a notare $ COLUMNS e stavo pensando qualcosa sulla stessa linea. alias diff = "diff -W $ {COLONNE}". Penso che preferirei chiedere alla shell piuttosto che fare affidamento sull'ambiente.
VxJasonxV,

1
tputconsidera $COLUMNS, stty -ae la descrizione del terminale, usando il primo di quelli che hanno un valore significativo. eval $(resize)può essere usato per costringerli ad essere sincronizzati con ciò che il terminale pensa sia la sua dimensione.
geekosaur,

nota che se hai tabstops non standard (es. tabs 2nel tuo .bashrc) dovrai anche usare il flag -t o diff produrrà un output molto bizzarro
Jeff
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.