Sostituisci `show-trailing-whitespace` in` diff-mode`


9

Ho show-trailing-whitespaceimpostato tglobalmente nel mio .emacsfile e questo non è generalmente un problema, tranne quando sto diff-modeguardando una patch che ha uno spazio bianco finale obbligatorio per le linee di contesto vuote.

Una soluzione potrebbe essere quella di trasformare semplicemente fuori show-trailing-whitespacein diff-modein qualche gancio rilevanti, ma in realtà mi piacerebbe lasciare uno spazio vuoto nelle linee di cambiamento per ancora presentarsi. Ad esempio, se ho introdotto accidentalmente uno spazio bianco finale o se lo sto rimuovendo, va bene, e voglio ancora che appaia in trailing-whitespacefaccia . Non voglio che le linee di contesto vuote vengano trattate come spazi vuoti finali poiché sono necessarie per il formato diff stesso.

Ecco un esempio dell'attuale comportamento che ottengo:

inserisci qui la descrizione dell'immagine

E questo è quello che vorrei:

inserisci qui la descrizione dell'immagine

Ecco un altro esempio, ma questa volta, con l' aggiunta effettiva di spazi bianchi:

inserisci qui la descrizione dell'immagine

Tuttavia, se disabilito show-trailing-whitespacecompletamente in diff-mode, non vedrei alcun rosso scuro. Invece, questo è quello che voglio:

inserisci qui la descrizione dell'immagine

Fondamentalmente, penso che ciò implichi la show-trailing-whitespaceconsapevolezza che le linee diff con un solo spazio sono speciali.


3
Sei sicuro che disabilitarlo completamente in modalità diff non è quello che vuoi? Se hai aggiunto o rimosso accidentalmente spazi vuoti finali, la modalità diff non lo evidenzierà indipendentemente dalla configurazione di emacs (in virtù del fatto che si tratta di una modifica nel file)?
Malabarba,

Voglio vedere lo spazio bianco finale nel carattere di spazio bianco di rosso. Sentiti libero di includere una risposta per disabilitare solo in modalità diff in quanto ciò potrebbe essere utile per altre persone, ma non è esattamente quello che stavo cercando.
b4hand,

1
Sarebbe soddisfacente se la faccia di evidenziazione della modalità diff fosse impostata su qualcosa di simile al rosso della modalità spazio bianco?
Malabarba,

Risposte:


1

Una soluzione è disattivare la modalità spazio bianco finale in modalità Diff e definire invece le proprie regole di blocco dei caratteri personalizzate per lo spazio bianco finale che non si desidera vedere.

(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))

2

Il valore di show-trailing-whitespace diventa buffer locale quando impostato, quindi puoi semplicemente impostarlo nel relativo hook:

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

Per controllare la documentazione per lo show-trailing-spazio bianco: C-h v show-trailing-whitespace.


2
Ma questo disattiva la modalità per l'intero buffer, che è esattamente ciò che b4hand vuole evitare.
Gilles 'SO- smetti di essere malvagio' il
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.