# HG changeset patch # User Chong Yidong # Date 1215832778 0 # Node ID 029de4e224b6e92eb66e7d4919457e60ed970f4e # Parent 44d71ca880f5ae93dd4f90902217c3fbf6afc4a1 (Fvertical_motion): Restore hscroll before moving to goal column. diff -r 44d71ca880f5 -r 029de4e224b6 src/indent.c --- 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)); }