@itemx @key{PageUp}
@itemx @key{prior}
Scroll backward by three months (@code{calendar-scroll-right-three-months}).
+@item C-l
+Recenter the date at point.
@end table
@kindex > @r{(Calendar mode)}
(or @key{prior}) are equivalent to @kbd{C-v} and @kbd{M-v}, just as
they are in other modes.
+@kindex C-l @r{(Calendar mode)}
+@findex calendar-recenter
+ The command @kbd{C-l} (@code{calendar-recenter}) scrolls the calendar
+on display so that the month of the date at point is centered
+horizontally. Next invocation of this command puts that month on the
+leftmost position, and another invocation puts it on the rightmost
+position. Subsequent invocations reuse the same order in a cyclical
+manner.
+
@node Counting Days
@section Counting Days
last-nonmenu-event))
(calendar-scroll-left (* -3 arg) event))
+(defvar calendar-recenter-last-op nil
+ "Last calendar recenter operation performed.")
+
+;;;###cal-autoload
+(defun calendar-recenter ()
+ "Scroll the calendar so that the month of the date at point is centered.
+Next invocation puts this month on the leftmost position, and another
+invocation puts this month on the rightmost position. Subsequent
+invocations reuse the same order in a cyclical manner."
+ (interactive)
+ (let ((positions '(center first last))
+ (cursor-month (calendar-extract-month
+ (calendar-cursor-to-nearest-date))))
+ ;; Update global last position upon repeat.
+ (setq calendar-recenter-last-op
+ (if (eq this-command last-command)
+ (car (or (cdr (memq calendar-recenter-last-op positions))
+ positions))
+ (car positions)))
+ ;; Like most functions in calendar, a span of three displayed months
+ ;; is implied here.
+ (cond ((eq calendar-recenter-last-op 'center)
+ (cond ((= cursor-month (1- displayed-month))
+ (calendar-scroll-right))
+ ((= cursor-month (1+ displayed-month))
+ (calendar-scroll-left))))
+ ;; Other sub-cases should not happen as we should be centered
+ ;; from here.
+ ((eq calendar-recenter-last-op 'first)
+ (calendar-scroll-left))
+ ((eq calendar-recenter-last-op 'last)
+ (calendar-scroll-right 2)))))
+
;;;###cal-autoload
(defun calendar-forward-day (arg)
"Move the cursor forward ARG days.
(define-key map "\C-x>" 'calendar-scroll-left)
(define-key map [next] 'calendar-scroll-left-three-months)
(define-key map "\C-v" 'calendar-scroll-left-three-months)
+ (define-key map "\C-l" 'calendar-recenter)
(define-key map "\C-b" 'calendar-backward-day)
(define-key map "\C-p" 'calendar-backward-week)
(define-key map "\e{" 'calendar-backward-month)