]> git.eshelyaron.com Git - emacs.git/commitdiff
(recenter-top-bottom): Determine top and bottom positions using
authorChong Yidong <cyd@stupidchicken.com>
Mon, 18 Aug 2008 03:46:51 +0000 (03:46 +0000)
committerChong Yidong <cyd@stupidchicken.com>
Mon, 18 Aug 2008 03:46:51 +0000 (03:46 +0000)
scroll-margin instead of scroll-conservatively.

lisp/window.el

index 5490f7bd293614d37d1f6ef87876f8f9942144a3..2439c9f8c6b42d208495c690f894ef5577e309b3 100644 (file)
@@ -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)
 \f