Subject: bug#18285: 24.3.92; A combination of `display' on text and `invisible' and `before/after-string' leads to the before/after string being displayed twice

From: Dmitry Gutov <[email-masked]>
Date: Sun, 24 Aug 2014 05:28:42 +0400

On 08/23/2014 12:55 AM, Eli Zaretskii wrote:

> Look at the code inside load_overlay_strings that handles this, to
> understand what I'm saying.

Do you mean the situation when the `invisible' overlay starts before the 
`display' starts? And then we skip to the end because of `invisible', 
but that position is covered by `display', so if we ignore the 
`invisible' there, `before-string' would not be displayed?

>>> The question is what would you expect from the second example, if it
>>> used before-string there?  Should the before-string be displayed or
>>> shouldn't it?  Since invisible makes the beginning of the overlay
>>> disappear, under your suggestion it won't be displayed.

This doesn't seem to apply to the second example, because the overlay 
with `invisible' and the `display' prop start at the same position, so 
the beginning of the overlay would not be "made disappear".

I'm not sure what to do in the "mixed" cases like described above, 
though. Maybe only make `invisible' ignored when `display' covers the 
entirety of its span.

Or maybe this complexity is an argument in favor of `invisible' taking 
priority over `display', after all.

That sounds like it may be easier to implement, or at least specify: 
don't handle `display' only when it's entirely covered by `invisible'.

> You asked to ignore the invisible, so it will change.

Basically, my suggestion was to ignore it when `display' already 
performs all of its job. But the edge cases make it more complicated.