From 29b79ba19785cf3d5bbb3779779ca3a7714ee2e1 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 13 Apr 2013 11:54:02 +0300 Subject: [PATCH] Fix vertical cursor motion when there are overlay strings at EOL. src/indent.c (Fvertical_motion): Don't consider display strings on overlay strings as display strings on the buffer position we started from. This prevents vertical cursor motion from jumping more than one line when there's an overlay string with a display property at end of line. Reported by Karl Chen in http://lists.gnu.org/archive/html/emacs-devel/2013-04/msg00362.html. --- src/ChangeLog | 10 ++++++++++ src/indent.c | 8 ++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 08f33eb7d02..af2d38d2e87 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2013-04-13 Eli Zaretskii + + * indent.c (Fvertical_motion): Don't consider display strings on + overlay strings as display strings on the buffer position we + started from. This prevents vertical cursor motion from jumping + more than one line when there's an overlay string with a display + property at end of line. + Reported by Karl Chen in + http://lists.gnu.org/archive/html/emacs-devel/2013-04/msg00362.html. + 2013-04-12 Stefan Monnier * window.c (select_window): `record_buffer' even if window is diff --git a/src/indent.c b/src/indent.c index 67796ab8a8f..47358e17db8 100644 --- a/src/indent.c +++ b/src/indent.c @@ -2006,11 +2006,15 @@ whether or not it is currently displayed in some window. */) const char *s = SSDATA (it.string); const char *e = s + SBYTES (it.string); + disp_string_at_start_p = /* If it.area is anything but TEXT_AREA, we need not bother about the display string, as it doesn't affect cursor positioning. */ - disp_string_at_start_p = - it.string_from_display_prop_p && it.area == TEXT_AREA; + it.area == TEXT_AREA + && it.string_from_display_prop_p + /* A display string on anything but buffer text (e.g., on + an overlay string) doesn't affect cursor positioning. */ + && (it.sp > 0 && it.stack[it.sp - 1].method == GET_FROM_BUFFER); while (s < e) { if (*s++ == '\n') -- 2.39.2