Make diff Utiliser la largeur totale du terminal en mode côte à côte

40

La plupart des applications utilisent intelligemment toute la largeur du terminal à leur disposition. Mon shell le fait, screen, vim, etc. Cependant, diffen mode côte à côte ( -y), non. Cela me met en colère. Il utilise une largeur de 126 caractères, ce qui ne représente même pas la moitié de mon terminal de 270 blocs de largeur.

Regarder à travers la page de manuel ne révèle rien de particulier concernant l’ajustement automatique de la largeur, mais le spécifie manuellement via -W.

Existe-t-il peut-être une "fonctionnalité cachée" diffpour lui permettre de s’étendre automatiquement sur toute la largeur du terminal? Ou; Quel est le chemin le plus facile pour insérer automatiquement -W <terminalsize>dans ma commande diff chaque fois que je l'exécute?

Je suis fondé sur l'hypothèse que l'ajout automatique de -W à tout ne peut rien faire de mal, car cela signifiera toujours "utiliser $ x colonnes", ce qui est toujours ce que je veux, que je sois en mode côte à côte, ou autrement.

VxJasonxV
la source

Réponses:

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

devrait le faire. Vous voudrez également l'ajouter à ~ / .bashrc.

Il - 2s’agit principalement de paranoïa, dans le cas où quelque chose (Unicode intégré à double largeur?) S’étend suffisamment pour que la ligne s’enroule; si vous voulez, vous pouvez simplement utiliser

$ alias diff='diff -W $(tput cols)'
geekosaur
la source
J'ai commencé à remarquer $ COLUMNS et je pensais quelque chose dans le même sens. alias diff = "diff -W $ {COLUMNS}". Je pense que je préférerais demander à la coquille plutôt que de compter sur l'environnement bien.
VxJasonxV
1
tputconsidère $COLUMNS, stty -aet la description du terminal, en utilisant le premier de ceux qui a une valeur significative. eval $(resize)peut être utilisé pour les forcer à être synchronisés avec ce que le terminal pense de sa taille.
geekosaur
notez que si vous avez des tabstops non standard (par exemple tabs 2dans votre .bashrc), vous devrez également utiliser le drapeau -t ou diff produira un résultat très bizarre
Jeff