Subject: bug#10903: 24.0.93; redisplay glitch with before-string and display overlays

From: Stephen Berman <[email-masked]>
Date: Mon, 27 Feb 2012 23:04:03 +0100

1. emacs -Q

2. Type `C-x b a RET' to get a fresh buffer in Fundamental mode, and  at
(point-min) type "012".

3. Type `M-<' so that the cursor is over (i.e. just before) `0'.

4. Type `M-: (overlay-put (make-overlay (point) (point)) 'before-string
"*")'.  Now you see this:

*012

5. Type `M-: (overlay-put (make-overlay (point) (1+ (point))) 'display
"")'.  Now you see this:

*12

6. Type `M-: (remove-overlays)' to restore "012".

7. Type SPC to advance the cursor and the start of "012" to column one.

8. Repeat step 4.  Now you see this:

 *012

9. Repeat step 5.  Now you see this:

 *112

According to my tests, this redisplay glitch happens when the overlays
begin anywhere other than (point-min).  It also only happens when the
before-string overlay is added prior to the display string overlay, and
only when the value of the display string is "".  I don't know when this
problem appeared, but it does not happen in Emacs 23.3.

In GNU Emacs 24.0.93.1 (i686-suse-linux-gnu, GTK+ Version 2.24.7)
 of 2012-02-26 on escher
Windowing system distributor `The X.Org Foundation', version 11.0.11004000
Configured using:
 `configure '--without-toolkit-scroll-bars' 'CFLAGS=-g''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=local
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t