# HG changeset patch # User Richard M. Stallman # Date 847672531 0 # Node ID 8b1dd6f2222d7b8568813156c17cea60bf4ce088 # Parent d62b7f309f2b2ff2f496e605707282d639188ef5 (scroll_margin): New variable. (init_xdisp): Set up Lisp variable. (redisplay_window): Implement scroll_margin; don't use old start pos if point is inside the margin. diff -r d62b7f309f2b -r 8b1dd6f2222d src/xdisp.c --- a/src/xdisp.c Mon Nov 11 00:34:50 1996 +0000 +++ b/src/xdisp.c Mon Nov 11 00:35:31 1996 +0000 @@ -143,6 +143,10 @@ when appropriate. */ static int scroll_conservatively; +/* Recenter the window whenever point gets within this many lines + of the top or bottom of the window. */ +int scroll_margin; + /* Nonzero if try_window_id has made blank lines at window bottom since the last redisplay that paused */ static int blank_end_of_window; @@ -1699,11 +1703,23 @@ && XFASTINT (w->window_end_vpos) < XFASTINT (w->height) && !EQ (window, minibuf_window)) { + int this_scroll_margin = scroll_margin; + pos = *compute_motion (startp, 0, (hscroll ? 1 - hscroll : 0), 0, PT, height, 0, width, hscroll, pos_tab_offset (w, startp), w); - if (pos.vpos < height) + /* Don't use a scroll margin that is negative or too large. */ + if (this_scroll_margin < 0) + this_scroll_margin = 0; + + if (XINT (w->height) < 4 * scroll_margin) + this_scroll_margin = XINT (w->height) / 4; + + /* If point fits on the screen, and not within the scroll margin, + we are ok. */ + if (pos.vpos < height - this_scroll_margin + && (pos.vpos >= this_scroll_margin || startp == BEGV)) { /* Ok, point is still on frame */ if (w == XWINDOW (FRAME_SELECTED_WINDOW (f))) @@ -4474,6 +4490,12 @@ "*Scroll up to this many lines, to bring point back on screen."); scroll_conservatively = 0; + DEFVAR_INT ("scroll-margin", &scroll_margin, + "*Number of lines of margin at the top and bottom of a window.\n\ +Recenter the window whenever point gets within this many lines\n\ +of the top or bottom of the window."); + scroll_margin = 0; + DEFVAR_INT ("debug-end-pos", &debug_end_pos, "Don't ask"); DEFVAR_BOOL ("truncate-partial-width-windows",