summaryrefslogtreecommitdiff
path: root/src/indent.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2017-07-03 18:57:01 +0300
committerEli Zaretskii <eliz@gnu.org>2017-07-03 18:57:01 +0300
commit52bfb7d4d6595302b5261ff810951e0b3281352c (patch)
tree0ce66e5db8fff172a6843af2666dbbf58bf3e267 /src/indent.c
parent4c9353a5840b285631a86a5bad2b48ea6276abf3 (diff)
downloademacs-52bfb7d4d6595302b5261ff810951e0b3281352c.tar.gz
Avoid errors in vertical-motion when buffer is narrowed
* src/indent.c (Fvertical_motion): If need to start from window-start, and it is outside of the accessible portion, temporarily widen the buffer. This avoids errors in evil-mode. Reported by James Nguyen <james@jojojames.com>.
Diffstat (limited to 'src/indent.c')
-rw-r--r--src/indent.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/indent.c b/src/indent.c
index 2cacfbbe3c0..70351f90466 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -2077,11 +2077,24 @@ whether or not it is currently displayed in some window. */)
&& !EQ (Vdisplay_line_numbers, Qvisual))
{
struct text_pos wstart;
+ bool saved_restriction = false;
+ ptrdiff_t count1 = SPECPDL_INDEX ();
SET_TEXT_POS_FROM_MARKER (wstart, w->start);
itdata = bidi_shelve_cache ();
+ /* We must start from window's start point, but it could be
+ outside the accessible region. */
+ if (wstart.charpos < BEGV || wstart.charpos > ZV)
+ {
+ record_unwind_protect (save_restriction_restore,
+ save_restriction_save ());
+ Fwiden ();
+ saved_restriction = true;
+ }
start_display (&it, w, wstart);
move_it_by_lines (&it, 1);
lnum_width = it.lnum_width;
+ if (saved_restriction)
+ unbind_to (count1, Qnil);
bidi_unshelve_cache (itdata, 0);
}
SET_TEXT_POS (pt, PT, PT_BYTE);