summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog6
-rw-r--r--lisp/window.el33
2 files changed, 39 insertions, 0 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 797e258b339..70a183b7764 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
+2009-11-23 Deniz Dogan <deniz.a.m.dogan@gmail.com> (tiny change)
+
+ * window.el (move-to-window-line-last-op): New var.
+ (move-to-window-line-top-bottom): New command.
+ (global-map): Bind M-r move-to-window-line-top-bottom.
+
2009-11-23 Sven Joachim <svenjoac@gmx.de>
* dired-x.el (dired-guess-shell-alist-default):
diff --git a/lisp/window.el b/lisp/window.el
index 6d32e42ef1d..e93d3a55d26 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -1652,6 +1652,39 @@ Top and bottom destinations are actually `scroll-margin' lines
(recenter (- -1 this-scroll-margin))))))))
(define-key global-map [?\C-l] 'recenter-top-bottom)
+
+(defvar move-to-window-line-last-op nil
+ "Indicates the last move-to-window-line operation performed.
+Possible values: `top', `middle', `bottom'.")
+
+(defun move-to-window-line-top-bottom (&optional arg)
+ "Position point relative to window.
+
+With an argument, acts like `move-to-window-line'.
+
+With no argument, positions point at center of window.
+Successive calls positions point at the top, the bottom and again
+at the center of the window."
+ (interactive "P")
+ (cond
+ (arg (move-to-window-line arg)) ; Always respect ARG.
+ ((or (not (eq this-command last-command))
+ (eq move-to-window-line-last-op 'bottom))
+ (setq move-to-window-line-last-op 'middle)
+ (call-interactively 'move-to-window-line))
+ (t
+ (let ((this-scroll-margin
+ (min (max 0 scroll-margin)
+ (truncate (/ (window-body-height) 4.0)))))
+ (cond ((eq move-to-window-line-last-op 'middle)
+ (setq move-to-window-line-last-op 'top)
+ (move-to-window-line this-scroll-margin))
+ ((eq move-to-window-line-last-op 'top)
+ (setq move-to-window-line-last-op 'bottom)
+ (move-to-window-line (- -1 this-scroll-margin))))))))
+
+(define-key global-map [?\M-r] 'move-to-window-line-top-bottom)
+
(defvar mouse-autoselect-window-timer nil
"Timer used by delayed window autoselection.")