diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/xdisp.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/xdisp.c b/src/xdisp.c index f6518e08599..d70bc3d4238 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -3029,6 +3029,7 @@ handle_stop (it) | |||
| 3029 | return; | 3029 | return; |
| 3030 | if (!get_overlay_strings_1 (it, 0, 0)) | 3030 | if (!get_overlay_strings_1 (it, 0, 0)) |
| 3031 | return; | 3031 | return; |
| 3032 | it->ignore_overlay_strings_at_pos_p = 1; | ||
| 3032 | it->string_from_display_prop_p = 0; | 3033 | it->string_from_display_prop_p = 0; |
| 3033 | handle_overlay_change_p = 0; | 3034 | handle_overlay_change_p = 0; |
| 3034 | handled = HANDLED_RECOMPUTE_PROPS; | 3035 | handled = HANDLED_RECOMPUTE_PROPS; |
| @@ -4924,7 +4925,8 @@ push_it (it) | |||
| 4924 | p->u.stretch.object = it->object; | 4925 | p->u.stretch.object = it->object; |
| 4925 | break; | 4926 | break; |
| 4926 | } | 4927 | } |
| 4927 | p->pos = it->current; | 4928 | p->position = it->position; |
| 4929 | p->current = it->current; | ||
| 4928 | p->end_charpos = it->end_charpos; | 4930 | p->end_charpos = it->end_charpos; |
| 4929 | p->string_nchars = it->string_nchars; | 4931 | p->string_nchars = it->string_nchars; |
| 4930 | p->area = it->area; | 4932 | p->area = it->area; |
| @@ -4955,7 +4957,8 @@ pop_it (it) | |||
| 4955 | p = it->stack + it->sp; | 4957 | p = it->stack + it->sp; |
| 4956 | it->stop_charpos = p->stop_charpos; | 4958 | it->stop_charpos = p->stop_charpos; |
| 4957 | it->face_id = p->face_id; | 4959 | it->face_id = p->face_id; |
| 4958 | it->current = p->pos; | 4960 | it->current = p->current; |
| 4961 | it->position = p->position; | ||
| 4959 | it->string = p->string; | 4962 | it->string = p->string; |
| 4960 | if (NILP (it->string)) | 4963 | if (NILP (it->string)) |
| 4961 | SET_TEXT_POS (it->current.string_pos, -1, -1); | 4964 | SET_TEXT_POS (it->current.string_pos, -1, -1); |
| @@ -5113,6 +5116,7 @@ back_to_previous_visible_line_start (it) | |||
| 5113 | while (IT_CHARPOS (*it) > BEGV) | 5116 | while (IT_CHARPOS (*it) > BEGV) |
| 5114 | { | 5117 | { |
| 5115 | back_to_previous_line_start (it); | 5118 | back_to_previous_line_start (it); |
| 5119 | |||
| 5116 | if (IT_CHARPOS (*it) <= BEGV) | 5120 | if (IT_CHARPOS (*it) <= BEGV) |
| 5117 | break; | 5121 | break; |
| 5118 | 5122 | ||
| @@ -11813,25 +11817,25 @@ set_cursor_from_row (w, row, matrix, delta, delta_bytes, dy, dvpos) | |||
| 11813 | glyph on point by scanning from string_start again. */ | 11817 | glyph on point by scanning from string_start again. */ |
| 11814 | Lisp_Object limit; | 11818 | Lisp_Object limit; |
| 11815 | Lisp_Object string; | 11819 | Lisp_Object string; |
| 11820 | struct glyph *stop = glyph; | ||
| 11816 | int pos; | 11821 | int pos; |
| 11817 | 11822 | ||
| 11818 | limit = make_number (pt_old + 1); | 11823 | limit = make_number (pt_old + 1); |
| 11819 | end = glyph; | ||
| 11820 | glyph = string_start; | 11824 | glyph = string_start; |
| 11821 | x = string_start_x; | 11825 | x = string_start_x; |
| 11822 | string = glyph->object; | 11826 | string = glyph->object; |
| 11823 | pos = string_buffer_position (w, string, string_before_pos); | 11827 | pos = string_buffer_position (w, string, string_before_pos); |
| 11824 | /* If STRING is from overlay, LAST_POS == 0. We skip such glyphs | 11828 | /* If STRING is from overlay, LAST_POS == 0. We skip such glyphs |
| 11825 | because we always put cursor after overlay strings. */ | 11829 | because we always put cursor after overlay strings. */ |
| 11826 | while (pos == 0 && glyph < end) | 11830 | while (pos == 0 && glyph < stop) |
| 11827 | { | 11831 | { |
| 11828 | string = glyph->object; | 11832 | string = glyph->object; |
| 11829 | SKIP_GLYPHS (glyph, end, x, EQ (glyph->object, string)); | 11833 | SKIP_GLYPHS (glyph, stop, x, EQ (glyph->object, string)); |
| 11830 | if (glyph < end) | 11834 | if (glyph < stop) |
| 11831 | pos = string_buffer_position (w, glyph->object, string_before_pos); | 11835 | pos = string_buffer_position (w, glyph->object, string_before_pos); |
| 11832 | } | 11836 | } |
| 11833 | 11837 | ||
| 11834 | while (glyph < end) | 11838 | while (glyph < stop) |
| 11835 | { | 11839 | { |
| 11836 | pos = XINT (Fnext_single_char_property_change | 11840 | pos = XINT (Fnext_single_char_property_change |
| 11837 | (make_number (pos), Qdisplay, Qnil, limit)); | 11841 | (make_number (pos), Qdisplay, Qnil, limit)); |
| @@ -11839,13 +11843,13 @@ set_cursor_from_row (w, row, matrix, delta, delta_bytes, dy, dvpos) | |||
| 11839 | break; | 11843 | break; |
| 11840 | /* Skip glyphs from the same string. */ | 11844 | /* Skip glyphs from the same string. */ |
| 11841 | string = glyph->object; | 11845 | string = glyph->object; |
| 11842 | SKIP_GLYPHS (glyph, end, x, EQ (glyph->object, string)); | 11846 | SKIP_GLYPHS (glyph, stop, x, EQ (glyph->object, string)); |
| 11843 | /* Skip glyphs from an overlay. */ | 11847 | /* Skip glyphs from an overlay. */ |
| 11844 | while (glyph < end | 11848 | while (glyph < stop |
| 11845 | && ! string_buffer_position (w, glyph->object, pos)) | 11849 | && ! string_buffer_position (w, glyph->object, pos)) |
| 11846 | { | 11850 | { |
| 11847 | string = glyph->object; | 11851 | string = glyph->object; |
| 11848 | SKIP_GLYPHS (glyph, end, x, EQ (glyph->object, string)); | 11852 | SKIP_GLYPHS (glyph, stop, x, EQ (glyph->object, string)); |
| 11849 | } | 11853 | } |
| 11850 | } | 11854 | } |
| 11851 | 11855 | ||