summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChong Yidong <cyd@stupidchicken.com>2008-08-18 03:46:51 +0000
committerChong Yidong <cyd@stupidchicken.com>2008-08-18 03:46:51 +0000
commit46f2aa14ba58b5607a224e81693ba5610040eb99 (patch)
treed0f0e0c08c37effa4aaa842fed3163841e3cc413
parent0444738fa23791885958d10612f4381122d7e936 (diff)
downloademacs-46f2aa14ba58b5607a224e81693ba5610040eb99.tar.gz
(recenter-top-bottom): Determine top and bottom positions using
scroll-margin instead of scroll-conservatively.
-rw-r--r--lisp/window.el29
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)