emacs-diffs
[Top][All Lists]
Advanced

[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: Thu, 30 Jan 2003 22:53:44 -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));
            }
        }
      }
  




reply via email to

[Prev in Thread] Current Thread [Next in Thread]