comparison lisp/window.el @ 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 2accf461be62
children 161416156d88
comparison
equal deleted inserted replaced
86158:61154518604b 86159:c679b91efdfa
877 (bury-buffer buffer)) 877 (bury-buffer buffer))
878 878
879 ;; Maybe get rid of the window. 879 ;; Maybe get rid of the window.
880 (and window (not window-handled) (not window-solitary) 880 (and window (not window-handled) (not window-solitary)
881 (delete-window window)))) 881 (delete-window window))))
882
883 (defvar recenter-last-op nil
884 "Indicates the last recenter operation performed.
885 Possible values: `top', `middle', `bottom'.")
886
887 (defun recenter-top-bottom (&optional arg)
888 "Move current line to window center, top, and bottom, successively.
889 With a prefix argument, this is the same as `recenter':
890 With numeric prefix ARG, move current line to window-line ARG.
891 With plain `C-u', move current line to window center.
892
893 Otherwise move current line to window center on first call, and to
894 top, middle, or bottom on successive calls.
895
896 The starting position of the window determines the cycling order:
897 If initially in the top or middle third: top -> middle -> bottom.
898 If initially in the bottom third: bottom -> middle -> top.
899
900 Top and bottom destinations are actually `scroll-conservatively' lines
901 from true window top and bottom."
902 (interactive "P")
903 (cond
904 (arg (recenter arg)) ; Always respect ARG.
905 ((not (eq this-command last-command))
906 ;; First time - save mode and recenter.
907 (let ((bottom (1+ (count-lines 1 (window-end))))
908 (current (1+ (count-lines 1 (point))))
909 (total (window-height)))
910 (setq recenter-last-op 'middle)
911 (recenter)))
912 (t ;; repeat: loop through various options.
913 (setq recenter-last-op
914 (ecase recenter-last-op
915 (middle (recenter scroll-conservatively) 'top)
916 (top (recenter (1- (- scroll-conservatively))) 'bottom)
917 (bottom (recenter) 'middle))))))
918
919 (define-key global-map [?\C-l] 'recenter-top-bottom)
882 920
883 (defvar mouse-autoselect-window-timer nil 921 (defvar mouse-autoselect-window-timer nil
884 "Timer used by delayed window autoselection.") 922 "Timer used by delayed window autoselection.")
885 923
886 (defvar mouse-autoselect-window-position nil 924 (defvar mouse-autoselect-window-position nil