Subject: bug#10181: 24.0.92; [wishlist] split `diff-refine-change' in several faces

From: Juri Linkov <[email-masked]>
Date: Sat, 19 May 2012 02:07:14 +0300

> Thank Juri.  The patch looks like a good idea.  Checking the :inherit is
> not sufficient, because I'd typically modify the added-face without
> removing the inheritance.
> Better to add a customization variable.
>
> This said, the OP's request is about the diff-refine-hook case, not
> about the whole-line highlighting.

The reason why I picked this report is because I found that I can't
anymore use diff-mode without these improvements.  I suppose everyone
dealing with the UI of modern version control systems including our very own
http://bzr.savannah.gnu.org/lh/emacs/trunk/changes
that uses red to highlight diff deletions and green to highlight
diff insertions might feel uncomfortable with the current default
Emacs colored diff.

AFAICS, some users might prefer an older color scheme with three colors
(removed - red, changed - yellow, added - green) used in the UI of older
version control systems like ViewVC for CVS and Subversion, but some users
might prefer a color scheme used in newer VCS like Loggerhead for Bazaar
with just two colors (removed - red, added - green).

The diff-refine-hook case depends on this customization, i.e. when the user
prefers the removed-changed-added scheme, then the face `diff-refine-change'
should be used.  When the user prefers the removed-added scheme, then
only `diff-refine-removed' and `diff-refine-added' should be used.

One solution would be to define `diff-changed-face' (currently defvar)
with defcustom.  Then users will be able to customize it to nil to use
just two faces `diff-removed' and `diff-added'.