Subject: bug#42300: Visual bug in diff-mode

From: Gregory Heytings <[email-masked]>
Date: Thu, 9 Jul 2020 21:23:36 +0200 (CEST)

Diff-mode was updated in Emacs 27, and it is now possible to use the 
fringe to indicate whether the lines were added, deleted, or are common. 
The face is omitted in the display property in the case common lines, 
which leads to the bug described below.

Steps to reproduce:

1. start emacs -Q
2. (setq diff-font-lock-prettify t)
3. to make the bug clearly visible: (set-face-attribute 'fringe nil :background "red" :foreground "yellow")
4. open a diff file (with "common" lines, that is, lines starting with a space)
5. observe that the fringe in front of the common lines is red
6. press C-x C-+, the fringe in front of the common lines is now white
7. press -, the fringe in front of the common lines is now red again

Fix:

--- diff-mode.el.orig	2020-06-29 17:39:26.000000000 +0000
+++ diff-mode.el	2020-07-09 18:44:08.000000000 +0000
@@ -2518,7 +2518,7 @@
                                 '((?+ . (left-fringe diff-fringe-add diff-indicator-added))
                                   (?- . (left-fringe diff-fringe-del diff-indicator-removed))
                                   (?! . (left-fringe diff-fringe-rep diff-indicator-changed))
-                                 (?\s . (left-fringe diff-fringe-nul))))))
+                                 (?\s . (left-fringe diff-fringe-nul fringe))))))
            (put-text-property (match-beginning 0) (match-end 0) 'display spec))))
      ;; Mimicks the output of Magit's diff.
      ;; FIXME: This has only been tested with Git's diff output.