(defun es-calendar-recenter (&optional all-frames)
(let (( calendar-width
(+ (* 7 3 3)
(* 2 calendar-intermonth-spacing)
-1)))
(save-excursion
(goto-char (point-min))
(while (search-forward-regexp "^ +" nil t)
(put-text-property
(match-beginning 0)
(match-end 0)
'display
`(space :align-to (+ center (,(/ calendar-width -2)
. width))))))))
(defadvice calendar-generate (after center-calendar activate)
(es-calendar-recenter t))
(eval-after-load 'calendar
'(defun calendar-update-mode-line ()
"Update the calendar mode line with the current date and date style."
(if (bufferp (get-buffer calendar-buffer))
(with-current-buffer calendar-buffer
(let* ((start (- calendar-left-margin 2))
(date (condition-case nil
(calendar-cursor-to-nearest-date)
(error (calendar-current-date))))
(content-string (calendar-string-spread
(mapcar 'eval calendar-mode-line-format)
?\s (- calendar-right-margin (1- start)))))
(setq mode-line-format
(concat (propertize
" "
'display
`(space :align-to (+ center (,(/ (length content-string) -2) . width))))
content-string)))
(force-mode-line-update)))))