From: Chong Yidong Date: Sat, 12 Jul 2008 03:19:38 +0000 (+0000) Subject: (Fvertical_motion): Restore hscroll before moving to goal column. X-Git-Tag: emacs-pretest-23.0.90~4230 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2f4ec7ce4fe0cb5036a919abdc101a611202ffd2;p=emacs.git (Fvertical_motion): Restore hscroll before moving to goal column. --- diff --git a/src/indent.c b/src/indent.c index be5dc5f667f..d556cd87748 100644 --- a/src/indent.c +++ b/src/indent.c @@ -2055,12 +2055,11 @@ whether or not it is currently displayed in some window. */) } 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 @@ whether or not it is currently displayed in some window. */) 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)); }