Mercurial > emacs
changeset 56894:8beec197715e
(set_cursor_from_row): Look for non-nil `cursor' property
in overlay or text-property strings; set cursor on corresponding
glyph rather than at end of the string.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Thu, 02 Sep 2004 22:34:07 +0000 |
parents | b3e23208cc2a |
children | b4c980745e7f |
files | src/xdisp.c |
diffstat | 1 files changed, 26 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xdisp.c Thu Sep 02 17:03:16 2004 +0000 +++ b/src/xdisp.c Thu Sep 02 22:34:07 2004 +0000 @@ -306,6 +306,7 @@ extern Lisp_Object Qheight; extern Lisp_Object QCwidth, QCheight, QCascent; extern Lisp_Object Qscroll_bar; +extern Lisp_Object Qcursor; /* Non-nil means highlight trailing whitespace. */ @@ -10647,6 +10648,7 @@ { struct glyph *glyph = row->glyphs[TEXT_AREA]; struct glyph *end = glyph + row->used[TEXT_AREA]; + struct glyph *cursor = NULL; /* The first glyph that starts a sequence of glyphs from string. */ struct glyph *string_start; /* The X coordinate of string_start. */ @@ -10656,6 +10658,7 @@ /* The last known character position before string_start. */ int string_before_pos; int x = row->x; + int cursor_x = x; int pt_old = PT - delta; /* Skip over glyphs not having an object at the start of the row. @@ -10688,12 +10691,29 @@ string_start = glyph; string_start_x = x; /* Skip all glyphs from string. */ - SKIP_GLYPHS (glyph, end, x, STRINGP (glyph->object)); - } - } - - if (string_start - && (glyph == end || !BUFFERP (glyph->object) || last_pos > pt_old)) + do + { + if ((cursor == NULL || glyph > cursor) + && !NILP (Fget_char_property (make_number ((glyph)->charpos), + Qcursor, (glyph)->object))) + { + cursor = glyph; + cursor_x = x; + } + x += glyph->pixel_width; + ++glyph; + } + while (glyph < end && STRINGP (glyph->object)); + } + } + + if (cursor != NULL) + { + glyph = cursor; + x = cursor_x; + } + else if (string_start + && (glyph == end || !BUFFERP (glyph->object) || last_pos > pt_old)) { /* We may have skipped over point because the previous glyphs are from string. As there's no easy way to know the