From 46f2aa14ba58b5607a224e81693ba5610040eb99 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 18 Aug 2008 03:46:51 +0000 Subject: [PATCH] (recenter-top-bottom): Determine top and bottom positions using scroll-margin instead of scroll-conservatively. --- lisp/window.el | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/lisp/window.el b/lisp/window.el index 5490f7bd293..2439c9f8c6b 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -1436,26 +1436,25 @@ top, middle, or bottom on successive calls. The cycling order is: middle -> top -> bottom. -Top and bottom destinations are actually `scroll-conservatively' lines -from true window top and bottom." +Top and bottom destinations are actually `scroll-margin' lines +the from true window top and bottom." (interactive "P") (cond (arg (recenter arg)) ; Always respect ARG. - ((not (eq this-command last-command)) - ;; First time - save mode and recenter. + ((or (not (eq this-command last-command)) + (eq recenter-last-op 'bottom)) (setq recenter-last-op 'middle) (recenter)) - (t ;; repeat: loop through various options. - (setq recenter-last-op - (cond ((eq recenter-last-op 'middle) - (recenter scroll-conservatively) - 'top) - ((eq recenter-last-op 'top) - (recenter (1- (- scroll-conservatively))) - 'bottom) - ((eq recenter-last-op 'bottom) - (recenter) - 'middle)))))) + (t + (let ((this-scroll-margin + (min (max 0 scroll-margin) + (truncate (/ (window-body-height) 4.0))))) + (cond ((eq recenter-last-op 'middle) + (setq recenter-last-op 'top) + (recenter this-scroll-margin)) + ((eq recenter-last-op 'top) + (setq recenter-last-op 'bottom) + (recenter (- -1 this-scroll-margin)))))))) (define-key global-map [?\C-l] 'recenter-top-bottom) -- 2.39.2