[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/xdisp.c
From: |
Kenichi Handa |
Subject: |
[Emacs-diffs] Changes to emacs/src/xdisp.c |
Date: |
Fri, 31 Jan 2003 01:11:01 -0500 |
Index: emacs/src/xdisp.c
diff -c emacs/src/xdisp.c:1.803 emacs/src/xdisp.c:1.804
*** emacs/src/xdisp.c:1.803 Wed Jan 29 08:12:46 2003
--- emacs/src/xdisp.c Thu Jan 30 22:53:43 2003
***************
*** 9447,9452 ****
--- 9447,9465 ----
return Qnil;
}
+
+ /* Increment GLYPH until it reaches END or CONDITION fails while
+ adding (GLYPH)->pixel_width to X. */
+
+ #define SKIP_GLYPHS(glyph, end, x, condition) \
+ do \
+ { \
+ (x) += (glyph)->pixel_width; \
+ ++(glyph); \
+ } \
+ while ((glyph) < (end) && (condition))
+
+
/* Set cursor position of W. PT is assumed to be displayed in ROW.
DELTA is the number of bytes by which positions recorded in ROW
differ from current buffer positions. */
***************
*** 9501,9512 ****
string_start = glyph;
string_start_x = x;
/* Skip all glyphs from string. */
! do
! {
! x += glyph->pixel_width;
! ++glyph;
! }
! while (glyph < end && STRINGP (glyph->object));
}
}
--- 9514,9520 ----
string_start = glyph;
string_start_x = x;
/* Skip all glyphs from string. */
! SKIP_GLYPHS (glyph, end, x, STRINGP (glyph->object));
}
}
***************
*** 9517,9544 ****
are from string. As there's no easy way to know the
character position of the current glyph, find the correct
glyph on point by scanning from string_start again. */
! Lisp_Object pos, limit;
! limit = make_number (MATRIX_ROW_END_CHARPOS (row) + delta);
glyph = string_start;
x = string_start_x;
! pos = make_number (string_buffer_position (w, glyph->object,
! string_before_pos));
! pos = Fnext_single_char_property_change (pos, Qdisplay, Qnil, limit);
! while (XINT (pos) <= pt_old)
{
/* Skip glyphs from the same string. */
! do
{
! x += glyph->pixel_width;
! ++glyph;
}
- while (glyph < end
- && EQ (glyph->object, string_start->object));
- if (glyph == end || !STRINGP (glyph->object))
- break;
- string_start = glyph;
- pos = Fnext_single_char_property_change (pos, Qdisplay, Qnil, limit);
}
}
--- 9525,9566 ----
are from string. As there's no easy way to know the
character position of the current glyph, find the correct
glyph on point by scanning from string_start again. */
! Lisp_Object limit;
! Lisp_Object string;
! int pos;
! limit = make_number (pt_old + 1);
! end = glyph;
glyph = string_start;
x = string_start_x;
! string = glyph->object;
! pos = string_buffer_position (w, string, string_before_pos);
! /* If STRING is from overlay, LAST_POS == 0. We skip such glyphs
! because we always put cursor after overlay strings. */
! while (pos == 0 && glyph < end)
! {
! string = glyph->object;
! SKIP_GLYPHS (glyph, end, x, EQ (glyph->object, string));
! if (glyph < end)
! pos = string_buffer_position (w, glyph->object, string_before_pos);
! }
!
! while (glyph < end)
{
+ pos = XINT (Fnext_single_char_property_change
+ (make_number (pos), Qdisplay, Qnil, limit));
+ if (pos > pt_old)
+ break;
/* Skip glyphs from the same string. */
! string = glyph->object;
! SKIP_GLYPHS (glyph, end, x, EQ (glyph->object, string));
! /* Skip glyphs from an overlay. */
! while (glyph < end
! && ! string_buffer_position (w, glyph->object, pos))
{
! string = glyph->object;
! SKIP_GLYPHS (glyph, end, x, EQ (glyph->object, string));
}
}
}