Subject: Re: bug#19201: 24.4.51; Faulty interaction between overlays with display-related properties in TTY

From: Eli Zaretskii <[email-masked]>
Date: Thu, 27 Nov 2014 18:41:51 +0200

> From: Dmitry Gutov <[email-masked]>
> Date: Thu, 27 Nov 2014 05:05:16 +0200
> 
> Calling the command defined below results in different behaviors between
> a graphical frame and a text terminal.
> 
> (defun display-test ()
>   (interactive)
>   (pop-to-buffer (get-buffer-create "display-test"))
>   (insert "aaa\nbbb\nccc\nddd\neee")
>   (goto-char 14)
>   (let ((ias (make-overlay 4 16))
>         (bsf (make-overlay 1 4)))
>     (overlay-put ias 'invisible t)
>     (overlay-put ias 'after-string "\nxxx\nyyy\nzzz")
>     (overlay-put bsf 'before-string
>                  (propertize "!"
>                              'display
>                              (list 'left-fringe
>                                    'question-mark
>                                    'warning)))))
> 
> Evaluate this, then type `M-x display-test'.
> 
> In graphical mode, I see what I'd expect:
> 
> aaa
> xxx
> yyy
> zzz
> eee
> 
> (with a fringe indicator on the first line),
> 
> whereas when trying this in terminal, I see:
> 
> aaa
> eee

For the record, this has nothing to do with TTY vs GUI frames.  You
can have the same problem on a GUI frame if you use a bogus symbol for
the fringe bitmap, like 'foobar instead of 'question-mark.

Evidently, the Founding Fathers never meant for us to use display
properties on after-strings that specify display on the fringe.  Emacs
22 and 23 infloop if you try your recipe on a TTY there.  Emacs 24.1
is the first release that doesn't, and it already has this bug.

Fixed in 6b765b8 on the emacs-24 branch.