From: Eli Zaretskii Date: Mon, 3 Jul 2017 15:57:01 +0000 (+0300) Subject: Avoid errors in vertical-motion when buffer is narrowed X-Git-Tag: emacs-26.0.90~518^2~156^2~4 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=52bfb7d4d6595302b5261ff810951e0b3281352c;p=emacs.git 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 . --- 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);