Anular `show-trailing-whitespace` en` diff-mode`

9

He show-trailing-whitespaceconfigurado tglobalmente en mi .emacsarchivo, y esto generalmente no es un problema, excepto cuando estoy diff-modemirando un parche que tiene espacio en blanco final obligatorio para líneas de contexto en blanco.

Una solución sería simplemente desactivarlo show-trailing-whitespaceen diff-modealgún gancho relevante, pero en realidad me gustaría que aún aparezca el espacio en blanco al final de las líneas de cambio. Por ejemplo, si accidentalmente introduje un espacio en blanco al final o si lo estoy eliminando, está bien, y todavía quiero que aparezca en la trailing-whitespacecara . Simplemente no quiero que las líneas de contexto en blanco se traten como espacios en blanco finales, ya que son necesarias para el formato diff en sí.

Aquí hay un ejemplo del comportamiento actual que obtengo:

ingrese la descripción de la imagen aquí

Y esto es lo que me gustaría:

ingrese la descripción de la imagen aquí

Aquí hay otro ejemplo, pero esta vez, con la adición real de espacios en blanco:

ingrese la descripción de la imagen aquí

Sin embargo, si desactivo por show-trailing-whitespacecompleto diff-mode, entonces no vería ningún rojo oscuro en absoluto. En cambio, esto es lo que quiero:

ingrese la descripción de la imagen aquí

Básicamente, creo que esto implica darse show-trailing-whitespacecuenta de que las líneas de diferencia con un solo espacio son especiales.

b4hand
fuente
3
¿Estás seguro de que deshabilitar esto por completo en modo diff no es lo que quieres? Si ha agregado o eliminado espacios en blanco al final accidentalmente, ¿no resaltará el modo diff independientemente de su configuración de emacs (debido al hecho de que es un cambio en el archivo)?
Malabarba
Quiero ver el espacio en blanco final en la fuente de espacio en blanco de rojo. Siéntase libre de incluir una respuesta para deshabilitar solo en modo diff, ya que eso podría ser útil para otras personas, pero eso no es exactamente lo que estaba buscando.
b4hand
1
¿Sería satisfactorio si la propia cara de resaltado del modo diff estuviera configurada en algo similar al rojo del modo espacio en blanco?
Malabarba

Respuestas:

1

Una solución es desactivar el modo de espacio en blanco al final en el modo Diff y, en su lugar, definir sus propias reglas de bloqueo de fuente personalizadas para el espacio en blanco al final que no desea ver.

(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- deja de ser malvado'
fuente
2

El valor de se show-trailing-whitespaceconvierte en buffer local cuando se establece, por lo que puede configurarlo en el enlace correspondiente:

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

Para comprobar la documentación para presentas se arrastra un espacio en blanco: C-h v show-trailing-whitespace.

aerique
fuente
2
Pero eso desactiva el modo para todo el búfer, que es precisamente lo que b4hand quiere evitar.
Gilles 'SO- deja de ser malvado'