summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/window.c5
-rw-r--r--src/xdisp.c5
2 files changed, 6 insertions, 4 deletions
diff --git a/src/window.c b/src/window.c
index 374ef0f838..753ebc16fb 100644
--- a/src/window.c
+++ b/src/window.c
@@ -4813,8 +4813,9 @@ window_scroll_pixel_based (Lisp_Object window, int n, bool whole, bool noerror)
SET_TEXT_POS_FROM_MARKER (start, w->start);
/* Scrolling a minibuffer window via scroll bar when the echo area
shows long text sometimes resets the minibuffer contents behind
- our backs. */
- if (CHARPOS (start) > ZV)
+ our backs. Also, someone might narrow-to-region and immediately
+ call a scroll function. */
+ if (CHARPOS (start) > ZV || CHARPOS (start) < BEGV)
SET_TEXT_POS (start, BEGV, BEGV_BYTE);
/* If PT is not visible in WINDOW, move back one half of
diff --git a/src/xdisp.c b/src/xdisp.c
index dc68cd48e5..d1e884820b 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -1317,8 +1317,9 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int *x, int *y,
SET_TEXT_POS_FROM_MARKER (top, w->start);
/* Scrolling a minibuffer window via scroll bar when the echo area
shows long text sometimes resets the minibuffer contents behind
- our backs. */
- if (CHARPOS (top) > ZV)
+ our backs. Also, someone might narrow-to-region and immediately
+ call a scroll function. */
+ if (CHARPOS (top) > ZV || CHARPOS (top) < BEGV)
SET_TEXT_POS (top, BEGV, BEGV_BYTE);
/* If the top of the window is after CHARPOS, the latter is surely