Mercurial > emacs
changeset 71935:40a88e361834
(handle_single_display_spec): Ensure the right value of
it->position is saved by push_it.
(pop_it): Restore it->object for GET_FROM_BUFFER and GET_FROM_STRING.
(reseat_1): Don't setup it->object twice.
(set_iterator_to_next): No need to set it->object after pop_it.
(move_it_to): Explicitly check to see if last move reached to_charpos.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Mon, 17 Jul 2006 14:25:05 +0000 |
parents | b904c76fa243 |
children | ab6bbd94ecf9 |
files | src/xdisp.c |
diffstat | 1 files changed, 18 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xdisp.c Mon Jul 17 14:24:50 2006 +0000 +++ b/src/xdisp.c Mon Jul 17 14:25:05 2006 +0000 @@ -3880,7 +3880,7 @@ { Lisp_Object form; Lisp_Object location, value; - struct text_pos start_pos; + struct text_pos start_pos, save_pos; int valid_p; /* If SPEC is a list of the form `(when FORM . VALUE)', evaluate FORM. @@ -4097,7 +4097,10 @@ /* Save current settings of IT so that we can restore them when we are finished with the glyph property value. */ + save_pos = it->position; + it->position = *position; push_it (it); + it->position = save_pos; it->area = TEXT_AREA; it->what = IT_IMAGE; @@ -4171,7 +4174,10 @@ { /* Save current settings of IT so that we can restore them when we are finished with the glyph property value. */ + save_pos = it->position; + it->position = *position; push_it (it); + it->position = save_pos; if (NILP (location)) it->area = TEXT_AREA; @@ -4983,6 +4989,12 @@ case GET_FROM_STRETCH: it->object = p->u.comp.object; break; + case GET_FROM_BUFFER: + it->object = it->w->buffer; + break; + case GET_FROM_STRING: + it->object = it->string; + break; } it->end_charpos = p->end_charpos; it->string_nchars = p->string_nchars; @@ -5302,7 +5314,6 @@ xassert (CHARPOS (pos) >= BEGV && CHARPOS (pos) <= ZV); it->current.pos = it->position = pos; - XSETBUFFER (it->object, current_buffer); it->end_charpos = ZV; it->dpvec = NULL; it->current.dpvec_index = -1; @@ -5800,14 +5811,12 @@ { IT_STRING_BYTEPOS (*it) += it->len; IT_STRING_CHARPOS (*it) += it->cmp_len; - it->object = it->string; goto consider_string_end; } else if (it->method == GET_FROM_BUFFER) { IT_BYTEPOS (*it) += it->len; IT_CHARPOS (*it) += it->cmp_len; - it->object = it->w->buffer; } break; @@ -6047,9 +6056,7 @@ } } - /* Record what we have and where it came from. Note that we store a - buffer position in IT->position although it could arguably be a - string position. */ + /* Record what we have and where it came from. */ it->what = IT_CHARACTER; it->object = it->string; it->position = position; @@ -6764,6 +6771,10 @@ if (reached) break; } + else if (BUFFERP (it->object) + && it->method == GET_FROM_BUFFER + && IT_CHARPOS (*it) >= to_charpos) + skip = MOVE_POS_MATCH_OR_ZV; else skip = move_it_in_display_line_to (it, to_charpos, -1, MOVE_TO_POS);