Subject: bug#79275: closed (Re: bug#79275: 30.2.50; overlay line-prefix display property fighting with text display property)

From: [email-masked] (GNU bug Tracking System)
Date: Sat, 23 Aug 2025 08:40:02 +0000

Your bug report

#79275: 30.2.50; overlay line-prefix display property fighting with text display property

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
79275: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=79275
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#79275: 30.2.50; overlay line-prefix display property fighting with text display property
From: Eli Zaretskii <[email-masked]>
To: [email-masked]
Cc: [email-masked]
Date: Sat, 23 Aug 2025 11:38:56 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

> Cc: [email-masked]
> Date: Fri, 22 Aug 2025 09:49:04 +0300
> From: Eli Zaretskii <[email-masked]>
> 
> > From: "J.D. Smith" <[email-masked]>
> > Cc: [email-masked]
> > Date: Thu, 21 Aug 2025 15:46:03 -0400
> > 
> > Eli Zaretskii <[email-masked]> writes:
> > 
> > > Please try the patch below, I hope it fixes both of the situations you
> > > described.
> > 
> > Your latest patch indeed fixes this display conflict between overlays
> > and text properties at both the front of a fringe-displaying overlay and
> > in its middle.  The code I used to test:
> > 
> >    ;; Insert at least 4 blank lines above this and evaluate
> >    (progn
> >      (delete-all-overlays)
> >      (let ((ov (make-overlay 1 5)))
> >        (overlay-put ov 'line-prefix (propertize "SHOULDNOTSEETHIS" 'display
> >    				     '(left-fringe right-triangle success))))
> >      (put-text-property 1 2 'display ">testing front-fringe display\n")
> >      (put-text-property 3 4 'display ">testing mid-fringe display\n"))   
> > 
> > Thanks very much for your work on this.  I know how challenging it can
> > be to hunt down subtle bugs in the redisplay code.  I appreciate all the
> > time and energy you volunteer to continuously improve Emacs.
> 
> Thanks for testing.  I will run a few more tests before installing
> this: as you could see, this bug revealed a couple of serious design
> blunders in how line/wrap-prefix was implemented, so I'd like to make
> sure the changes didn't break anything.
> 
> What astonished me the most was the use of it->object to decide
> whether we iterate a buffer or a string, something that I learned long
> ago (and forgot) to be a very bad idea, see this comment in
> dispextern.h:
> 
>      Do NOT use !BUFFERP (it.object) as a test whether we are
>      iterating over a string; use STRINGP (it.string) instead.
> 

The fix is now installed on the master branch.  Closing the bug.

Subject: 30.2.50; overlay line-prefix display property fighting with text display property
From: JD Smith <[email-masked]>
To: [email-masked]
Date: Tue, 19 Aug 2025 21:39:38 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

An overlay which applies a line-prefix (e.g. to set the fringe) across several lines conflicts with underlying text which has a replacing display property set.  Evaluate the following in the *scratch* buffer, with at least 3 blank lines at the top of the buffer.

(progn
  (delete-all-overlays)
  (let ((ov (make-overlay 1 4)))
    (overlay-put ov 'line-prefix (propertize "SHOULDNOTSEETHIS" 'display
                                             '(left-fringe right-triangle success))))
  (put-text-property 2 3 'display ">testing fringe display"))

The result is very strange: the SHOULDNOTSEETHIS prefix string appears (sans fringe display), but then vanishes on the next redisplay.  Some (well-balanced) fight between overlay line-prefix display and normal display properties seems to be occurring.