diff options
author | Eli Zaretskii <eliz@gnu.org> | 2014-06-21 15:30:02 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2014-06-21 15:30:02 +0300 |
commit | 53b15fa6dc1b975a617923ec1da5d1b29a1f6955 (patch) | |
tree | 06c89292e6bfa367849ae67b7fd86e6f017fa2f0 | |
parent | 3114d9e702aada713f029cfd80f8785240c9d940 (diff) | |
download | emacs-53b15fa6dc1b975a617923ec1da5d1b29a1f6955.tar.gz |
Fix bug #17823 with vertical-motion in lines with line-prefix.
src/indent.c (Fvertical_motion): Move to the goal column, if any,
with a single call to move_it_in_display_line, not in two calls.
Doing this with two calls causes move_it_in_display_line apply the
line-prefix handling twice instead of just once.
-rw-r--r-- | src/ChangeLog | 4 | ||||
-rw-r--r-- | src/indent.c | 18 |
2 files changed, 10 insertions, 12 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 93a25ba2871..cd82e91c2dd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,6 +1,10 @@ 2014-06-21 Eli Zaretskii <eliz@gnu.org> * indent.c (Fvertical_motion): Doc fix. + Move to the goal column, if any, with a single call to + move_it_in_display_line, not in two calls. Doing this with two + calls causes move_it_in_display_line apply the line-prefix + handling twice instead of just once. (Bug#17823) 2014-06-21 Paul Eggert <eggert@cs.ucla.edu> diff --git a/src/indent.c b/src/indent.c index f492461bf50..711792f75cd 100644 --- a/src/indent.c +++ b/src/indent.c @@ -2129,20 +2129,14 @@ whether or not it is currently displayed in some window. */) } } - /* Move to the goal column, if one was specified. */ + /* Move to the goal column, if one was specified. If the window + was originally hscrolled, the goal column is interpreted as + an addition to the hscroll amount. */ if (!NILP (lcols)) { - /* 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); + int to_x = (int)(cols * FRAME_COLUMN_WIDTH (XFRAME (w->frame)) + 0.5); + + move_it_in_display_line (&it, ZV, first_x + to_x, MOVE_TO_X); } SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it)); |