Überschreiben Sie "show-trailing-whitespace" im "diff-mode"

9

Ich habe show-trailing-whitespacezu setzen tin meiner global - .emacsDatei, und dies ist in der Regel kein Problem , außer wenn ich in diff-modebei einem Patch suchen , die für leere Rahmen Linien obligatorischen Leerraum hat.

Eine Lösung wäre, einfach auszuschalten show-trailing-whitespacein diff-modein einigen relevanten Haken, aber eigentlich würde Ich mag für Leerraum in Wechsellinien noch auftauchen. Wenn ich zum Beispiel versehentlich einen nachgestellten Leerraum eingeführt habe oder ihn entferne, ist das in Ordnung, und ich möchte immer noch, dass dieser im trailing-whitespaceGesicht angezeigt wird . Ich möchte nur nicht, dass die leeren Kontextzeilen als nachfolgender Leerraum behandelt werden, da sie für das Diff-Format selbst erforderlich sind.

Hier ist ein Beispiel für das aktuelle Verhalten, das ich bekomme:

Geben Sie hier die Bildbeschreibung ein

Und das möchte ich:

Geben Sie hier die Bildbeschreibung ein

Hier ist ein weiteres Beispiel, diesmal jedoch mit einem tatsächlichen Leerzeichen:

Geben Sie hier die Bildbeschreibung ein

Wenn ich mich jedoch show-trailing-whitespacevollständig deaktiviere diff-mode, sehe ich überhaupt kein Dunkelrot. Stattdessen ist es das, was ich will:

Geben Sie hier die Bildbeschreibung ein

Grundsätzlich denke ich, dass man sich show-trailing-whitespacebewusst machen muss, dass Diff-Linien mit nur einem Leerzeichen etwas Besonderes sind.

b4hand
quelle
3
Sind Sie sicher, dass es nicht das ist, was Sie wollen, wenn Sie dies nur im Diff-Modus vollständig deaktivieren? Wenn Sie versehentlich nachgestellte Leerzeichen hinzugefügt oder entfernt haben, wird der Diff-Modus dies nicht unabhängig von Ihrer Emacs-Konfiguration hervorheben (aufgrund der Tatsache, dass es sich um eine Änderung in der Datei handelt)?
Malabarba
Ich möchte das nachgestellte Leerzeichen in der Leerzeichenschrift Rot sehen. Fühlen Sie sich frei, eine Antwort für die Deaktivierung nur im Diff-Modus anzugeben, da dies für andere Personen hilfreich sein könnte, aber das ist nicht genau das, wonach ich gesucht habe.
b4hand
1
Wäre es zufriedenstellend, wenn das eigene Hervorhebungsgesicht des Diff-Modus auf etwas Ähnliches wie das Rot des Weißraummodus eingestellt wäre?
Malabarba

Antworten:

1

Eine Lösung besteht darin, den Trailing Whitespace-Modus im Diff-Modus zu deaktivieren und stattdessen Ihre eigenen benutzerdefinierten Regeln für die Schriftsperre für das Trailing Whitespace zu definieren, die Sie nicht sehen möchten.

(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 - hör auf böse zu sein'
quelle
2

Der Wert von show-trailing-whitespacewird beim Setzen zum Puffer lokal, sodass Sie ihn einfach im entsprechenden Hook festlegen können:

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

So überprüfen Sie die Dokumentation auf show-trailing-whitespace : C-h v show-trailing-whitespace.

aerique
quelle
2
Aber das schaltet den Modus für den gesamten Puffer aus, genau das möchte b4hand vermeiden.
Gilles 'SO - hör auf böse zu sein'