summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChong Yidong <cyd@stupidchicken.com>2009-07-21 20:08:49 +0000
committerChong Yidong <cyd@stupidchicken.com>2009-07-21 20:08:49 +0000
commite832e6e9f1b7eeab66789b2940a286d4519e1f71 (patch)
treea63d2098020c2c753984413aba2ebbe2994ecac0
parentedc61b99e7b96675ba8d5f76cf07a5b97efcddf6 (diff)
downloademacs-e832e6e9f1b7eeab66789b2940a286d4519e1f71.tar.gz
* xdisp.c (move_it_to): For continued lines ending in a tab, take
the overflowed pixels into account (Bug#3879).
-rw-r--r--src/ChangeLog5
-rw-r--r--src/xdisp.c13
2 files changed, 14 insertions, 4 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index e2cffad968f..0f75f0933c4 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -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-17 Kenichi Handa <handa@m17n.org>
* casetab.c (shuffle): Fix the logic of setting up the cycle.
diff --git a/src/xdisp.c b/src/xdisp.c
index 8a2b2a387d9..f37586e81dc 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -7108,8 +7108,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 (;;)
{
@@ -7292,7 +7291,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;
@@ -7304,7 +7307,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;