GNU bug report logs - #79275
30.2.50; overlay line-prefix display property fighting with text display property

Previous Next

Package: emacs;

Reported by: JD Smith <jdtsmith <at> gmail.com>

Date: Wed, 20 Aug 2025 01:40:02 UTC

Severity: normal

Found in version 30.2.50

Done: Eli Zaretskii <eliz <at> gnu.org>

Full log


Message #23 received at 79275 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: "J.D. Smith" <jdtsmith <at> gmail.com>
Cc: 79275 <at> debbugs.gnu.org
Subject: Re: bug#79275: 30.2.50; overlay line-prefix display property
 fighting with text display property
Date: Fri, 22 Aug 2025 09:49:04 +0300
> From: "J.D. Smith" <jdtsmith <at> gmail.com>
> Cc: 79275 <at> debbugs.gnu.org
> Date: Thu, 21 Aug 2025 15:46:03 -0400
> 
> Eli Zaretskii <eliz <at> gnu.org> 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.




This bug report was last modified 20 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.