diff options
author | Chong Yidong <cyd@stupidchicken.com> | 2008-08-18 03:46:51 +0000 |
---|---|---|
committer | Chong Yidong <cyd@stupidchicken.com> | 2008-08-18 03:46:51 +0000 |
commit | 46f2aa14ba58b5607a224e81693ba5610040eb99 (patch) | |
tree | d0f0e0c08c37effa4aaa842fed3163841e3cc413 | |
parent | 0444738fa23791885958d10612f4381122d7e936 (diff) | |
download | emacs-46f2aa14ba58b5607a224e81693ba5610040eb99.tar.gz |
(recenter-top-bottom): Determine top and bottom positions using
scroll-margin instead of scroll-conservatively.
-rw-r--r-- | lisp/window.el | 29 |
1 files 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) |