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

From: Stefan Kangas <[email-masked]>
Date: Thu, 13 Aug 2020 09:23:52 -0700

tags 42300 + confirmed
found 42300 28.0.50
thanks

Gregory Heytings <[email-masked]> writes:

> 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

I can reproduce this on current master, and verify that the below change
fixes it.

I'm not that familiar with diff-mode.ela nor font-locking so it's better
that someone else takes a look and installs the 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.

Best regards,
Stefan Kangas