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.