ediff: Highlighting Difference Regions
7.5 Highlighting Difference Regions
===================================
The following variables control the way Ediff highlights difference
regions:
‘ediff-before-flag-bol’
‘ediff-after-flag-eol’
‘ediff-before-flag-mol’
‘ediff-after-flag-mol’
These variables hold strings that Ediff uses to mark the beginning
and the end of the differences found in files A, B, and C on
devices where Emacs cannot display faces. Ediff uses different
flags to highlight regions that begin/end at the beginning/end of a
line or in a middle of a line.
‘ediff-current-diff-face-A’
‘ediff-current-diff-face-B’
‘ediff-current-diff-face-C’
Ediff uses these faces to highlight current differences on devices
where Emacs can display faces. These and subsequently described
faces can be set either in ‘.emacs’ or in ‘.Xdefaults’. The X
resource for Ediff is ‘Ediff’, _not_ ‘emacs’. Please refer to
Emacs manual for the information on how to set X resources.
‘ediff-fine-diff-face-A’
‘ediff-fine-diff-face-B’
‘ediff-fine-diff-face-C’
Ediff uses these faces to show the fine differences between the
current differences regions in buffers A, B, and C, respectively.
‘ediff-even-diff-face-A’
‘ediff-even-diff-face-B’
‘ediff-even-diff-face-C’
‘ediff-odd-diff-face-A’
‘ediff-odd-diff-face-B’
‘ediff-odd-diff-face-C’
Non-current difference regions are displayed using these
alternating faces. The odd and the even faces are actually
identical on monochrome displays, because without colors options
are limited. So, Ediff uses italics to highlight non-current
differences.
‘ediff-force-faces’
Ediff generally can detect when Emacs is running on a device where
it can use highlighting with faces. However, if it fails to
determine that faces can be used, the user can set this variable to
‘t’ to make sure that Ediff uses faces to highlight differences.
‘ediff-highlight-all-diffs’
Indicates whether—on a windowing display—Ediff should highlight
differences using inserted strings (as on text-only terminals) or
using colors and highlighting. Normally, Ediff highlights all
differences, but the selected difference is highlighted more
visibly. One can cycle through various modes of highlighting by
typing ‘h’. By default, Ediff starts in the mode where all
difference regions are highlighted. If you prefer to start in the
mode where unselected differences are not highlighted, you should
set ‘ediff-highlight-all-diffs’ to ‘nil’. Type ‘h’ to restore
highlighting for all differences.
Ediff lets you switch between the two modes of highlighting. That
is, you can switch interactively from highlighting using faces to
highlighting using string flags, and back. Of course, switching
has effect only under a windowing system. On a text-only terminal
or in an xterm window, the only available option is highlighting
with strings.
If you want to change the default settings for ‘ediff-force-faces’ and
‘ediff-highlight-all-diffs’, you must do it *before* Ediff is loaded.
You can also change the defaults for the faces used to highlight the
difference regions. There are two ways to do this. The simplest and
the preferred way is to use the customization widget accessible from the
menubar. Ediff’s customization group is located under "Tools", which in
turn is under "Programming". The faces that are used to highlight
difference regions are located in the "Highlighting" subgroup of the
Ediff customization group.
The second, much more arcane, method to change default faces is to
include some Lisp code in ‘~/.emacs’. For instance,
(setq ediff-current-diff-face-A
(copy-face 'bold-italic 'ediff-current-diff-face-A))
would use the pre-defined face ‘bold-italic’ to highlight the current
difference region in buffer A (this face is not a good choice, by the
way).
If you are unhappy with just _some_ of the aspects of the default
faces, you can modify them when Ediff is being loaded using
‘ediff-load-hook’. For instance:
(add-hook 'ediff-load-hook
(lambda ()
(set-face-foreground
ediff-current-diff-face-B "blue")
(set-face-background
ediff-current-diff-face-B "red")
(make-face-italic
ediff-current-diff-face-B)))
*Please note:* to set Ediff’s faces, use only ‘copy-face’ or
‘set/make-face-...’ as shown above. Emacs’s low-level face-manipulation
functions should be avoided.