aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim F. Storm2006-06-21 11:49:24 +0000
committerKim F. Storm2006-06-21 11:49:24 +0000
commit4b364aa2acf025b29daeca8a59249c4c539f6c80 (patch)
tree4d257e0d2d664e2682d79ea0ca27bd18013d96ef
parenta86cce4f821669c6580e98dda2d1f7148ba1d68f (diff)
downloademacs-4b364aa2acf025b29daeca8a59249c4c539f6c80.tar.gz
emacs-4b364aa2acf025b29daeca8a59249c4c539f6c80.zip
(handle_stop): Set it->ignore_overlay_strings_at_pos_p
if we get any overlays. (set_cursor_from_row): Don't clobber `end' if we rescan from start_string. (push_it, pop_it): Save it->position.
-rw-r--r--src/xdisp.c24
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