# HG changeset patch # User Chong Yidong # Date 1248207129 0 # Node ID 835416032efae58e082ea0d3022ebfa14ad437fb # Parent 3c88eee19782b83cd5d00a132b03a2237cfbd414 * xdisp.c (move_it_to): For continued lines ending in a tab, take the overflowed pixels into account (Bug#3879). diff -r 3c88eee19782 -r 835416032efa src/ChangeLog --- a/src/ChangeLog Tue Jul 21 19:01:41 2009 +0000 +++ b/src/ChangeLog Tue Jul 21 20:12:09 2009 +0000 @@ -1,3 +1,8 @@ +2009-07-21 Chong Yidong + + * 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 * lread.c (load_depth): New variable. diff -r 3c88eee19782 -r 835416032efa src/xdisp.c --- a/src/xdisp.c Tue Jul 21 19:01:41 2009 +0000 +++ b/src/xdisp.c Tue Jul 21 20:12:09 2009 +0000 @@ -7090,8 +7090,7 @@ 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 @@ 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 @@ /* 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;