Zastąp `show-trailing-whiteespace` w` trybie różnicowym`

9

Mam show-trailing-whitespaceustawione tglobalnie w moim .emacspliku, a to nie jest zwykle problemem z wyjątkiem, gdy jestem w diff-modepatrząc na plaster, który ma obowiązek końcowe białe miejsca dla pustych linii kontekstu.

Jednym rozwiązaniem byłoby po prostu wyłączenie się show-trailing-whitespacew diff-modejakimś odpowiednim haku, ale tak naprawdę chciałbym, aby końcowe spacje w liniach zmian wciąż się pojawiały. Na przykład, jeśli przypadkowo wprowadziłem końcowe białe znaki lub je usuwam, to jest w porządku i nadal chcę, aby pojawiało się to na trailing-whitespacetwarzy . Po prostu nie chcę, aby puste linie kontekstu były traktowane jako końcowe białe znaki, ponieważ są one niezbędne dla samego formatu diff.

Oto przykład obecnego zachowania, które otrzymuję:

wprowadź opis zdjęcia tutaj

I właśnie tego chciałbym:

wprowadź opis zdjęcia tutaj

Oto kolejny przykład, ale tym razem z faktycznym dodaniem białych znaków:

wprowadź opis zdjęcia tutaj

Jeśli jednak show-trailing-whitespacecałkowicie się wyłączę diff-mode, nie zobaczę żadnej ciemnoczerwonej. Zamiast tego właśnie tego chcę:

wprowadź opis zdjęcia tutaj

Zasadniczo myślę, że wymaga to show-trailing-whitespaceuświadomienia sobie, że linie różnic z pojedynczą spacją są wyjątkowe.

b4hand
źródło
3
Czy na pewno wyłączenie tego całkowicie w trybie różnicowym nie jest tym, czego chcesz? Jeśli przypadkowo dodałeś lub usunąłeś końcowe białe znaki, czy tryb różnicowania nie podświetli tego niezależnie od konfiguracji emacsa (z tego powodu, że jest to zmiana w pliku)?
Malabarba
Chcę zobaczyć końcowe białe znaki w białej czcionce czerwonej. Podaj odpowiedź dotyczącą wyłączenia tylko w trybie różnicowym, ponieważ może to być pomocne dla innych osób, ale nie tego dokładnie szukałem.
b4hand
1
Czy byłoby zadowalające, gdyby własna twarz wyróżniająca trybu różnicowego była ustawiona na coś podobnego do czerwieni trybu białej przestrzeni?
Malabarba

Odpowiedzi:

1

Jednym z rozwiązań jest wyłączenie trybu końcowego białych znaków w trybie różnicowym i zdefiniowanie własnych reguł blokowania czcionek dla końcowych białych znaków, których nie chcesz widzieć.

(defvar diff-trailing-whitespace-keywords
  '(("^[+-<>]\\(.*\\S \\)?\\(\\s +\\)$" (2 'trailing-whitespace t))))
(defun diff-mode-font-lock-add-trailing-whitespace ()
  (setq diff-font-lock-keywords-and-whitespace
    (append diff-font-lock-keywords
        diff-trailing-whitespace-keywords))
  (setcar diff-font-lock-defaults 'diff-font-lock-keywords-and-whitespace))
(defun turn-off-trailing-whitespace ()
  (setq show-trailing-whitespace nil))
(add-hook 'diff-mode-hook 'turn-off-trailing-whitespace)
(eval-after-load "diff-mode" '(diff-mode-font-lock-add-trailing-whitespace))
Gilles „SO- przestań być zły”
źródło
2

Po ustawieniu wartość show-trailing-whitespacestaje się lokalnym buforem, dzięki czemu można ją ustawić w odpowiednim zaczepie:

(add-hook 'diff-mode-hook (lambda () (setq show-trailing-whitespace nil)))

Aby sprawdzić dokumentację show-trailing-białe znaki: C-h v show-trailing-whitespace.

aerique
źródło
2
Ale to wyłącza tryb dla całego bufora, czego dokładnie chce uniknąć b4hand.
Gilles „SO- przestań być zły”