;;; time.el --- display time, load and mail indicator in mode line of Emacs -*-coding: utf-8 -*-
-;; Copyright (C) 1985-1987, 1993-1994, 1996, 2000-2011
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1985-1987, 1993-1994, 1996, 2000-2014 Free Software
+;; Foundation, Inc.
;; Maintainer: FSF
(defcustom display-time-default-load-average 0
"Which load average value will be shown in the mode line.
-Almost every system can provide values of load for past 1 minute, past 5 or
-past 15 minutes. The default is to display 1 minute load average.
+Almost every system can provide values of load for the past 1 minute,
+past 5 or past 15 minutes. The default is to display 1-minute load average.
The value can be one of:
0 => 1 minute load
1 => 5 minutes load
- 2 => 15 minutes load"
+ 2 => 15 minutes load
+ nil => None (do not display the load average)"
:type '(choice (const :tag "1 minute load" 0)
(const :tag "5 minutes load" 1)
(const :tag "15 minutes load" 2)
:group 'display-time)
(defvar display-time-load-average nil
- "Load average currently being shown in mode line.")
+ "Value of the system's load average currently shown on the mode line.
+See `display-time-default-load-average'.
+
+This is an internal variable; setting it has no effect.")
(defcustom display-time-load-average-threshold 0.1
"Load-average values below this value won't be shown in the mode line."
:type 'integer
:version "23.1")
-(defvar display-time-world-mode-map
- (let ((map (make-sparse-keymap)))
- (define-key map "q" 'kill-this-buffer)
- map)
- "Keymap of Display Time World mode.")
-
;;;###autoload
(defun display-time ()
"Enable display of time, load level, and mail flag in mode lines.
(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.
(timer-activate timer)))))
(defun display-time-next-load-average ()
+ "Switch between different load averages in the mode line.
+Switches from the 1 to 5 to 15 minute load average, and then back to 1."
(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))
+ (display-time-update))
(defun display-time-mail-check-directory ()
(let ((mail-files (directory-files display-time-mail-directory t))
nil)))
(with-no-warnings
- ;; Warnings are suppresed to avoid "global/dynamic var `X' lacks a prefix".
+ ;; Warnings are suppressed to avoid "global/dynamic var `X' lacks a prefix".
(defvar now)
(defvar time)
(defvar load)
(seconds (substring time 17 19))
(time-zone (car (cdr (current-time-zone now))))
(day (substring time 8 10))
- (year (substring time 20 24))
+ (year (format-time-string "%Y" now))
(monthname (substring time 4 7))
(month
(cdr
;; This is inside the let binding, but we are not going to document
;; what variables are available.
(run-hooks 'display-time-hook))
- (force-mode-line-update))
+ (force-mode-line-update 'all))
(defun display-time-file-nonempty-p (file)
(let ((remote-file-name-inhibit-cache (- display-time-interval 5)))
;;;###autoload
(define-minor-mode display-time-mode
"Toggle display of time, load level, and mail flag in mode lines.
-With a numeric arg, enable this display if arg is positive.
-
-When this display is enabled, it updates automatically every minute
-\(you can control the number of seconds between updates by
-customizing `display-time-interval').
-If `display-time-day-and-date' is non-nil, the current day and date
-are displayed as well.
-This runs the normal hook `display-time-hook' after each update."
+With a prefix argument ARG, enable Display Time mode if ARG is
+positive, and disable it otherwise. If called from Lisp, enable
+it if ARG is omitted or nil.
+
+When Display Time mode is enabled, it updates every minute (you
+can control the number of seconds between updates by customizing
+`display-time-interval'). If `display-time-day-and-date' is
+non-nil, the current day and date are displayed as well. This
+runs the normal hook `display-time-hook' after each update."
:global t :group 'display-time
(and display-time-timer (cancel-timer display-time-timer))
(setq display-time-timer nil)
'display-time-event-handler)))
-(define-derived-mode display-time-world-mode nil "World clock"
+(define-derived-mode display-time-world-mode special-mode "World clock"
"Major mode for buffer that displays times in various time zones.
See `display-time-world'."
(setq show-trailing-whitespace nil))
(setenv "TZ" old-tz))
(setq fmt (concat "%-" (int-to-string max-width) "s %s\n"))
(dolist (timedata (nreverse result))
- (insert (format fmt (car timedata) (cdr timedata)))))
- (delete-char -1))
+ (insert (format fmt (car timedata) (cdr timedata))))
+ (delete-char -1)))
;;;###autoload
(defun display-time-world ()
(not (get-buffer display-time-world-buffer-name)))
(run-at-time t display-time-world-timer-second 'display-time-world-timer))
(with-current-buffer (get-buffer-create display-time-world-buffer-name)
- (display-time-world-display display-time-world-list))
- (pop-to-buffer display-time-world-buffer-name)
- (fit-window-to-buffer)
- (display-time-world-mode))
+ (display-time-world-display display-time-world-list)
+ (display-buffer display-time-world-buffer-name
+ (cons nil '((window-height . fit-window-to-buffer))))
+ (display-time-world-mode)))
(defun display-time-world-timer ()
(if (get-buffer display-time-world-buffer-name)
(let ((list timer-list))
(while list
(let ((elt (pop list)))
- (when (equal (symbol-name (aref elt 5)) "display-time-world-timer")
+ (when (equal (symbol-name (timer--function elt))
+ "display-time-world-timer")
(cancel-timer elt)))))))
;;;###autoload