Make diff Użyj pełnej szerokości terminala w trybie Side-by-Side

40

Większość aplikacji sprytnie wykorzystuje pełną dostępną dla nich terminal. Moja powłoka działa, screen, vim itp. Jednak diffw trybie side-by-side ( -y) nie działa. Gniewa mnie to. Używa 126 znaków, co nie jest nawet połową mojego terminalu o szerokości bloku 270.

Przejrzenie strony podręcznika nie ujawnia niczego szczególnego w automatycznym dostosowywaniu szerokości, a jedynie poprzez ręczne określenie jej -W.

Czy może istnieje „ukryta funkcja” polegająca diffna automatycznym rozszerzeniu do pełnej szerokości terminala? Lub; Jaka jest najłatwiejsza ścieżka do automatycznego wstawiania -W <terminalsize>do polecenia diff przy każdym uruchomieniu?

Zakładam, że automatyczne dodawanie -W do wszystkiego nie zaszkodzi, ponieważ będzie to zawsze oznaczać tylko „użyj $ x kolumn”, co zawsze jest tym, czego chcę, bez względu na to, czy jestem w trybie side-by-side, lub w przeciwnym wypadku.

VxJasonxV
źródło

Odpowiedzi:

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

powinien to zrobić. Będziesz także chciał dodać go do ~ / .bashrc.

Jest - 2to głównie paranoja, w przypadku gdy coś (osadzony Unicode o podwójnej szerokości?) Rozszerzy się wystarczająco, aby zawinąć linię; jeśli chcesz, możesz po prostu użyć

$ alias diff='diff -W $(tput cols)'
geekozaur
źródło
Zacząłem zauważać $ COLUMNS i myślałem o tym samym. alias diff = "diff -W $ {COLUMNS}". Myślę jednak, że wolałbym zapytać o powłokę, niż polegać na środowisku.
VxJasonxV
1
tputuważa $COLUMNS, stty -aoraz opis zacisków, używając pierwszej z tych, które posiada znaczącą wartość. eval $(resize)może być użyty do zmuszenia ich do zsynchronizowania z tym, co terminal myśli, że jego rozmiar.
geekozaur
zwróć uwagę, że jeśli masz niestandardowe tabstopsy (np. tabs 2w .bashrc), będziesz także musiał użyć flagi -t, ponieważ diff będzie generował bardzo dziwne wyniki
Jeff