-;;; time.el --- display time, load and mail indicator in mode line of Emacs -*-coding: utf-8 -*-
+;;; time.el --- display time, load and mail indicator in mode line of Emacs
-;; Copyright (C) 1985-1987, 1993-1994, 1996, 2000-2013 Free Software
+;; Copyright (C) 1985-1987, 1993-1994, 1996, 2000-2016 Free Software
;; Foundation, Inc.
-;; Maintainer: FSF
+;; Maintainer: emacs-devel@gnu.org
;; This file is part of GNU Emacs.
:type 'boolean
:group 'display-time)
-(defvar display-time-string nil)
+(defvar display-time-string nil
+ "String used in mode lines to display a time string.
+It should not be set directly, but is instead updated by the
+`display-time' function.")
;;;###autoload(put 'display-time-string 'risky-local-variable t)
(defcustom display-time-hook nil
(defcustom display-time-world-list
;; Determine if zoneinfo style timezones are supported by testing that
;; America/New York and Europe/London return different timezones.
- (let ((old-tz (getenv "TZ"))
- gmt nyt)
- (unwind-protect
- (progn
- (setenv "TZ" "America/New_York")
- (setq nyt (format-time-string "%z"))
- (setenv "TZ" "Europe/London")
- (setq gmt (format-time-string "%z")))
- (setenv "TZ" old-tz))
+ (let ((nyt (format-time-string "%z" nil "America/New_York"))
+ (gmt (format-time-string "%z" nil "Europe/London")))
(if (string-equal nyt gmt)
legacy-style-world-list
zoneinfo-style-world-list))
Each element has the form (TIMEZONE LABEL).
TIMEZONE should be in a format supported by your system. See the
documentation of `zoneinfo-style-world-list' and
-\`legacy-style-world-list' for two widely used formats. LABEL is
+`legacy-style-world-list' for two widely used formats. LABEL is
a string to display as the label of that TIMEZONE's time."
:group 'display-time
:type '(repeat (list string string))
(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.
(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))
;; 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)))
"Replace current buffer text with times in various zones, based on ALIST."
(let ((inhibit-read-only t)
(buffer-undo-list t)
- (old-tz (getenv "TZ"))
+ (now (current-time))
(max-width 0)
result fmt)
(erase-buffer)
- (unwind-protect
- (dolist (zone alist)
- (let* ((label (cadr zone))
- (width (string-width label)))
- (setenv "TZ" (car zone))
- (push (cons label
- (format-time-string display-time-world-time-format))
- result)
- (when (> width max-width)
- (setq max-width width))))
- (setenv "TZ" old-tz))
+ (dolist (zone alist)
+ (let* ((label (cadr zone))
+ (width (string-width label)))
+ (push (cons label
+ (format-time-string display-time-world-time-format
+ now (car zone)))
+ result)
+ (when (> width max-width)
+ (setq max-width width))))
(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)))
+ (delete-char -1))
+ (goto-char (point-min)))
;;;###autoload
(defun display-time-world ()