# HG changeset patch # User Kim F. Storm # Date 1142797128 0 # Node ID 4f6b547120ec278c6c9bc10c6cd013dfb282d066 # Parent 822a6a9bb8c9b500bdf229ce6e6f3f2416bf99f4 (set_cursor_from_row): Fix cursor property on overlay string, so it doesn't associate overlay string with following glyph by default. Allow integer property value to specify explicit number of buffer positions associate with overlay string. diff -r 822a6a9bb8c9 -r 4f6b547120ec src/xdisp.c --- a/src/xdisp.c Sun Mar 19 18:20:31 2006 +0000 +++ b/src/xdisp.c Sun Mar 19 19:38:48 2006 +0000 @@ -11604,7 +11604,7 @@ x += glyph->pixel_width; ++glyph; if (cursor_from_overlay_pos - && last_pos > cursor_from_overlay_pos) + && last_pos >= cursor_from_overlay_pos) { cursor_from_overlay_pos = 0; cursor = 0; @@ -11618,10 +11618,12 @@ /* Skip all glyphs from string. */ do { + Lisp_Object cprop; int pos; if ((cursor == NULL || glyph > cursor) - && !NILP (Fget_char_property (make_number ((glyph)->charpos), - Qcursor, (glyph)->object)) + && (cprop = Fget_char_property (make_number ((glyph)->charpos), + Qcursor, (glyph)->object), + !NILP (cprop)) && (pos = string_buffer_position (w, glyph->object, string_before_pos), (pos == 0 /* From overlay */ @@ -11632,14 +11634,15 @@ Add 1 to last_pos so that if point corresponds to the glyph right after the overlay, we still use a 'cursor' property found in that overlay. */ - cursor_from_overlay_pos = pos == 0 ? last_pos+1 : 0; + cursor_from_overlay_pos = (pos ? 0 : last_pos + + (INTEGERP (cprop) ? XINT (cprop) : 0)); cursor = glyph; cursor_x = x; } x += glyph->pixel_width; ++glyph; } - while (glyph < end && STRINGP (glyph->object)); + while (glyph < end && EQ (glyph->object, string_start->object)); } }