** ams@gnu.org, 9 July: eshell and external commands
http://lists.gnu.org/archive/html/emacs-devel/2007-08/msg00385.html
-** jbw@macs.hw.ac.uk, Sep 19: redisplay goes horribly wrong when a
-before-string contains multiple display properties
-http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg02442.html
-
-** jbw@macs.hw.ac.uk, Sep 19: part of display property on before-string
- property is not displayed
-http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg00138.html
-
** lekktu@gmail.com, Oct 11: frame-local variables weirdness
I proposed a patch, which fixed this and seemed right, but the patch
caused other problems. They are being investigated now.
+2007-10-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * xdisp.c (handle_display_prop): Ignore display specs after
+ replacing one when string text is being replaced.
+ (handle_single_display_spec): Pretend as if characters with display
+ property haven't been consumed only when buffer text is being replaced.
+
2007-10-14 Juanma Barranquero <lekktu@gmail.com>
* eval.c (do_autoload): Don't save autoloads.
{
if (handle_single_display_spec (it, XCAR (prop), object,
position, display_replaced_p))
- display_replaced_p = 1;
+ {
+ display_replaced_p = 1;
+ /* If some text in a string is replaced, `position' no
+ longer points to the position of `object'. */
+ if (STRINGP (object))
+ break;
+ }
}
}
else if (VECTORP (prop))
for (i = 0; i < ASIZE (prop); ++i)
if (handle_single_display_spec (it, AREF (prop, i), object,
position, display_replaced_p))
- display_replaced_p = 1;
+ {
+ display_replaced_p = 1;
+ /* If some text in a string is replaced, `position' no
+ longer points to the position of `object'. */
+ if (STRINGP (object))
+ break;
+ }
}
else
{
/* Say that we haven't consumed the characters with
`display' property yet. The call to pop_it in
set_iterator_to_next will clean this up. */
- *position = start_pos;
+ if (BUFFERP (object))
+ it->current.pos = start_pos;
}
else if (CONSP (value) && EQ (XCAR (value), Qspace))
{
it->method = GET_FROM_STRETCH;
it->object = value;
- *position = it->position = start_pos;
+ it->position = start_pos;
+ if (BUFFERP (object))
+ it->current.pos = start_pos;
}
#ifdef HAVE_WINDOW_SYSTEM
else
/* Say that we haven't consumed the characters with
`display' property yet. The call to pop_it in
set_iterator_to_next will clean this up. */
- *position = start_pos;
+ if (BUFFERP (object))
+ it->current.pos = start_pos;
}
#endif /* HAVE_WINDOW_SYSTEM */