Mercurial > emacs
changeset 96619:029de4e224b6
(Fvertical_motion): Restore hscroll before moving to goal column.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Sat, 12 Jul 2008 03:19:38 +0000 |
parents | 44d71ca880f5 |
children | 3bea8ede5bd0 |
files | src/indent.c |
diffstat | 1 files changed, 16 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/indent.c Sat Jul 12 03:19:25 2008 +0000 +++ b/src/indent.c Sat Jul 12 03:19:38 2008 +0000 @@ -2055,12 +2055,11 @@ } else { - int it_start; - int oselective; - int it_overshoot_expected; + int it_start, oselective, it_overshoot_expected, first_x; SET_TEXT_POS (pt, PT, PT_BYTE); start_display (&it, w, pt); + first_x = it.first_visible_x; /* Scan from the start of the line containing PT. If we don't do this, we start moving with IT->current_x == 0, while PT is @@ -2118,11 +2117,21 @@ if (XINT (lines) >= 0 || IT_CHARPOS (it) > 0) move_it_by_lines (&it, XINT (lines), 0); + /* Move to the goal column, if one was specified. */ if (!NILP (lcols)) - move_it_in_display_line - (&it, ZV, - (int)(cols * FRAME_COLUMN_WIDTH (XFRAME (w->frame)) + 0.5), - MOVE_TO_X); + { + /* If the window was originally hscrolled, move forward by + the hscrolled amount first. */ + if (first_x > 0) + { + move_it_in_display_line (&it, ZV, first_x, MOVE_TO_X); + it.current_x = 0; + } + move_it_in_display_line + (&it, ZV, + (int)(cols * FRAME_COLUMN_WIDTH (XFRAME (w->frame)) + 0.5), + MOVE_TO_X); + } SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it)); }