Mercurial > emacs
changeset 86159:c679b91efdfa
(recenter-last-op): New var.
(recenter-top-bottom): New command.
(global-map): Bind it to C-l.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Fri, 16 Nov 2007 18:50:35 +0000 |
parents | 61154518604b |
children | 1ede747999c6 |
files | lisp/ChangeLog lisp/window.el |
diffstat | 2 files changed, 42 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Fri Nov 16 18:27:07 2007 +0000 +++ b/lisp/ChangeLog Fri Nov 16 18:50:35 2007 +0000 @@ -1,5 +1,9 @@ 2007-11-16 Stefan Monnier <monnier@iro.umontreal.ca> + * window.el (recenter-last-op): New var. + (recenter-top-bottom): New command. + (global-map): Bind it to C-l. + * abbrev.el (abbrev--write): Fix error in transcription from C. * emulation/pc-select.el (pc-select-shifted-mark): Remove.
--- a/lisp/window.el Fri Nov 16 18:27:07 2007 +0000 +++ b/lisp/window.el Fri Nov 16 18:50:35 2007 +0000 @@ -879,6 +879,44 @@ ;; Maybe get rid of the window. (and window (not window-handled) (not window-solitary) (delete-window window)))) + +(defvar recenter-last-op nil + "Indicates the last recenter operation performed. +Possible values: `top', `middle', `bottom'.") + +(defun recenter-top-bottom (&optional arg) + "Move current line to window center, top, and bottom, successively. +With a prefix argument, this is the same as `recenter': + With numeric prefix ARG, move current line to window-line ARG. + With plain `C-u', move current line to window center. + +Otherwise move current line to window center on first call, and to +top, middle, or bottom on successive calls. + +The starting position of the window determines the cycling order: + If initially in the top or middle third: top -> middle -> bottom. + If initially in the bottom third: bottom -> middle -> top. + +Top and bottom destinations are actually `scroll-conservatively' lines +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. + (let ((bottom (1+ (count-lines 1 (window-end)))) + (current (1+ (count-lines 1 (point)))) + (total (window-height))) + (setq recenter-last-op 'middle) + (recenter))) + (t ;; repeat: loop through various options. + (setq recenter-last-op + (ecase recenter-last-op + (middle (recenter scroll-conservatively) 'top) + (top (recenter (1- (- scroll-conservatively))) 'bottom) + (bottom (recenter) 'middle)))))) + +(define-key global-map [?\C-l] 'recenter-top-bottom) (defvar mouse-autoselect-window-timer nil "Timer used by delayed window autoselection.")