+(defun display-time-event-handler ()
+ (display-time-update)
+ ;; Do redisplay right now, if no input pending.
+ (sit-for 0)
+ (let* ((current (current-time))
+ (timer display-time-timer)
+ ;; Compute the time when this timer will run again, next.
+ (next-time (timer-relative-time
+ (list (aref timer 1) (aref timer 2) (aref timer 3))
+ (* 5 (aref timer 4)) 0)))
+ ;; If the activation time is far in the past,
+ ;; skip executions until we reach a time in the future.
+ ;; This avoids a long pause if Emacs has been suspended for hours.
+ (or (> (nth 0 next-time) (nth 0 current))
+ (and (= (nth 0 next-time) (nth 0 current))
+ (> (nth 1 next-time) (nth 1 current)))
+ (and (= (nth 0 next-time) (nth 0 current))
+ (= (nth 1 next-time) (nth 1 current))
+ (> (nth 2 next-time) (nth 2 current)))
+ (progn
+ (timer-set-time timer (timer-next-integral-multiple-of-time
+ current display-time-interval)
+ display-time-interval)
+ (timer-activate timer)))))
+
+(defun display-time-next-load-average ()
+ (interactive)
+ (if (= 3 (setq display-time-load-average (1+ display-time-load-average)))
+ (setq display-time-load-average 0))
+ (display-time-update)
+ (sit-for 0))
+
+(defun display-time-mail-check-directory ()
+ (let ((mail-files (directory-files display-time-mail-directory t))
+ (size 0))
+ (while (and mail-files (= size 0))
+ ;; Count size of regular files only.
+ (setq size (+ size (or (and (file-regular-p (car mail-files))
+ (nth 7 (file-attributes (car mail-files))))
+ 0)))
+ (setq mail-files (cdr mail-files)))
+ (if (> size 0)
+ size
+ nil)))
+
+(defun display-time-update ()
+ "Update the display-time info for the mode line.
+However, don't redisplay right now.
+
+This is used for things like Rmail `g' that want to force an
+update which can wait for the next redisplay."