Mercurial > emacs
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 |