Subject: bug#43702: Emacs master: Incorrect highlighting in regexp isearch.

From: Drew Adams <[email-masked]>
Date: Tue, 6 Oct 2020 15:40:43 -0700 (PDT)

> > As I mentioned, it's simple to just repeat the use
> > of the same 8 faces, for 9-16, 17-24, etc.
> 
> This is a very good idea.  Now this is implemented in isearch.
>
> > I've added a third screenshot, where I did this:
> > recycle the faces of groups 1-5 for groups 9-13.
> 
> Yes, recycling is nice, this is what now is used in isearch.

Good to hear.

> You see?  So many problems when you tried to design
> a color palette for many isearch faces.

Did you say that before & I disagreed?  I don't think so.

(What I mentioned in my previous mail here was that I
didn't take into account that the foreground of face
`isearch' got used for all of the regexp-group faces,
because their default values didn't specify a foreground.)

> I suppose you agree that the previous color palette in
> isearch with a color gradient

I don't know what palette you're referring to, sorry.

> is not suitable for highlighting of group matches
> because while looking at highlighted matches it's quite impossible to
> say which color corresponds to which group number.
> I meant when colors looks like a heatmap, for example:

I'm not sure what to make of your heat-map image.
Is it supposed to show highlighting of regexps?
Certainly there are many, many fine gradations of
color in that image.

If your point is that it's hard to distinguish very
similar colors (e.g. your "-0.69" and "0.12"), then
yes, of course.

Your rainbow screenshot presumably is for matching
sequential regexp groups (again, not very typical).

It's OK, but it suffers from using a set of faces
with light and dark backgrounds.  The black foreground
is good against some of the backgrounds and bad against
others.

See attached, which are the faces I use by default
(for a light background mode).

The series runs first (groups 1-4) through different
pastel hues at the same saturation & value, and then
(groups 5-8) through the same series of hues but with
a lighter saturation & value (i.e., more pastel).

I think that helps, when trying to match regexp group
highlighting against group numbers.  There's only a
slight difference between the colors for the same hue
(different degrees of lightness), but it's pretty easy
to tell faces of different hue from each other.

I.e., it's easy to tell group 3 from groups 1, 2, and
4, and it's easy to tell 7 from 5, 6, and 7.  It's
harder to tell 3 from 7, but needing to do that will
be relatively rare.

> I started implementing group matches highlighting for lazy-highlight and also
> for query-replace, but then realized neither lazy-highlight nor query-replace
> need no such thing because this highlighting is only useful while
> incrementally constructing/inspecting a complex regexp for the current match
> in incremental isearch mode.

I don't agree, but won't argue about it.  I redefined
`replace-highlight' and `replace-dehighlight' so they
do highlight regexp groups, and I think it's helpful.

The same user option controls whether regexp groups
should be highlighted, for Isearch and replace:
`isearchp-highlight-regexp-group-levels-flag'.  And
you can toggle that during Isearch with `M-s h R'.

Anyway, thanks for working on this feature.  I think
it's helpful and will be welcome.