Subject: bug#21500: 24.5; Graphical glitch with display property lines in GUI Emacs

From: Eli Zaretskii <[email-masked]>
Date: Thu, 17 Sep 2015 07:57:39 +0300

[Please don't remove the bug address from the CC list.  We want this
discussion to be recorded by the bug tracker.]

> Date: Wed, 16 Sep 2015 22:34:02 +0200
> From: Vasilij Schneidermann <[email-masked]>
> 
> > What did you expect to see instead, and why?
> I did expect to always see a visible line, even with point on that space
> character.  What happens instead is that by putting point on it its face
> is used in reverse-video, but only for the actual width of the space
> character, not its declared one.

That's the default Emacs implementation of cursor display on GUI
frames: we erase the character at point, then draw that character
again with cursor colors (normally, in reverse video).  For
"white-space" characters, such as TAB and the stretch of white space
created by the 'space' display property, Emacs by default draws the
cursor using the width of the font's SPC character.  And that's
exactly what you saw.

> > If you set x-stretch-cursor to a non-nil value in the GUI session,
> > does the result explain what happens?
> Sort of, with it turned on the reverse-video effect goes over the
> declared width of the space character.

Isn't that what you originally expected to see?

> I was wondering whether one could ensure Emacs always renders a face in
> a readable way if it is turned practically invisible.

I don't understand: how does "invisible" come into play here?  Are you
talking about faces whose foreground and background are the same color?

> In fact, isn't the `:distant-foreground` property there for a
> similiar reason?

Yes.  But the face needs to have that as part of its definition.

Anyway, I see no relation between what you were wondering about and
the effect of cursor display that I believe was the trigger for this
bug report.  If you have questions about face rendering, I suggest to
ask them on emacs-devel.

Can we now close the bug?