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

9

J'ai show-trailing-whitespacedéfini tglobalement dans mon .emacsfichier, et ce n'est généralement pas un problème, sauf lorsque je diff-moderegarde un correctif qui a un espace de fin obligatoire pour les lignes de contexte vides.

Une solution serait de simplement désactiver show-trailing-whitespacedans diff-modeun crochet pertinent, mais en fait j'aimerais que les espaces blancs dans les lignes de changement apparaissent toujours. Par exemple, si j'ai accidentellement introduit un espace blanc arrière ou si je le supprime, c'est ok, et je veux toujours que cela apparaisse en trailing-whitespaceface . Je ne veux tout simplement pas que les lignes de contexte vides soient traitées comme des espaces blancs de fin car elles sont nécessaires pour le format diff lui-même.

Voici un exemple du comportement actuel que j'obtiens:

entrez la description de l'image ici

Et voici ce que j'aimerais:

entrez la description de l'image ici

Voici un autre exemple, mais cette fois, avec ajout d'espaces réels :

entrez la description de l'image ici

Cependant, si je le désactive show-trailing-whitespaceentièrement diff-mode, je ne verrais aucun rouge foncé. Au lieu de cela, c'est ce que je veux:

entrez la description de l'image ici

Fondamentalement, je pense que cela implique de prendre show-trailing-whitespaceconscience que les lignes de diff avec un seul espace sont spéciales.

b4hand
la source
3
Êtes-vous sûr de ne pas le désactiver entièrement en mode diff? Si vous avez ajouté ou supprimé accidentellement des espaces de fin, le mode diff ne mettra-t-il pas en évidence cela indépendamment de votre configuration emacs (en raison du fait qu'il s'agit d'un changement dans le fichier)?
Malabarba
Je veux voir le blanc de fin dans la police d'espace blanc de rouge. N'hésitez pas à inclure une réponse pour désactiver uniquement en mode diff car cela pourrait être utile pour d'autres personnes, mais ce n'est pas exactement ce que je cherchais.
b4hand
1
Serait-il satisfaisant si le visage de surbrillance du mode diff était réglé sur quelque chose de similaire au rouge du mode espace blanc?
Malabarba

Réponses:

1

Une solution consiste à désactiver le mode Espaces de fin en mode Diff et à la place définir vos propres règles de verrouillage de police personnalisées pour les espaces de fin que vous ne souhaitez pas voir.

(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- arrête d'être méchant'
la source
2

La valeur de show-trailing-whitespacedevient tampon local lorsqu'elle est définie, vous pouvez donc simplement la définir dans le hook correspondant:

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

Pour vérifier la documentation show-arrière-espaces: C-h v show-trailing-whitespace.

aerique
la source
2
Mais cela désactive le mode pour tout le tampon, ce qui est précisément ce que b4hand veut éviter.
Gilles 'SO- arrête d'être méchant'