* xdisp.c (move_it_to): For continued lines ending in a tab, take
authorChong Yidong <cyd@stupidchicken.com>
Tue, 21 Jul 2009 20:12:09 +0000 (20:12 +0000)
committerChong Yidong <cyd@stupidchicken.com>
Tue, 21 Jul 2009 20:12:09 +0000 (20:12 +0000)
the overflowed pixels into account (Bug#3879).

src/ChangeLog
src/xdisp.c

index 5f4c417..b3410b1 100644 (file)
@@ -1,3 +1,8 @@
+2009-07-21  Chong Yidong  <cyd@stupidchicken.com>
+
+       * xdisp.c (move_it_to): For continued lines ending in a tab, take
+       the overflowed pixels into account (Bug#3879).
+
 2009-07-21  Ken Raeburn  <raeburn@raeburn.org>
 
        * lread.c (load_depth): New variable.
index a0ac755..33cd722 100644 (file)
@@ -7090,8 +7090,7 @@ move_it_to (it, to_charpos, to_x, to_y, to_vpos, op)
      int op;
 {
   enum move_it_result skip, skip2 = MOVE_X_REACHED;
-  int line_height;
-  int reached = 0;
+  int line_height, line_start_x = 0, reached = 0;
 
   for (;;)
     {
@@ -7274,7 +7273,11 @@ move_it_to (it, to_charpos, to_x, to_y, to_vpos, op)
              if (it->current_x != it->last_visible_x
                  && (op & MOVE_TO_VPOS)
                  && !(op & (MOVE_TO_X | MOVE_TO_POS)))
-               set_iterator_to_next (it, 0);
+               {
+                 line_start_x = it->current_x + it->pixel_width
+                   - it->last_visible_x;
+                 set_iterator_to_next (it, 0);
+               }
            }
          else
            it->continuation_lines_width += it->current_x;
@@ -7286,7 +7289,9 @@ move_it_to (it, to_charpos, to_x, to_y, to_vpos, op)
 
       /* Reset/increment for the next run.  */
       recenter_overlay_lists (current_buffer, IT_CHARPOS (*it));
-      it->current_x = it->hpos = 0;
+      it->current_x = line_start_x;
+      line_start_x = 0;
+      it->hpos = 0;
       it->current_y += it->max_ascent + it->max_descent;
       ++it->vpos;
       last_height = it->max_ascent + it->max_descent;