summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2014-06-21 15:30:02 +0300
committerEli Zaretskii <eliz@gnu.org>2014-06-21 15:30:02 +0300
commit53b15fa6dc1b975a617923ec1da5d1b29a1f6955 (patch)
tree06c89292e6bfa367849ae67b7fd86e6f017fa2f0
parent3114d9e702aada713f029cfd80f8785240c9d940 (diff)
downloademacs-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/ChangeLog4
-rw-r--r--src/indent.c18
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));