]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid errors in vertical-motion when buffer is narrowed
authorEli Zaretskii <eliz@gnu.org>
Mon, 3 Jul 2017 15:57:01 +0000 (18:57 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 3 Jul 2017 15:57:01 +0000 (18:57 +0300)
* 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>.

src/indent.c

index 2cacfbbe3c019c1d6732618ae19d9edbb7636adf..70351f90466a38469f99b1e32daa281df2829661 100644 (file)
@@ -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);