]> code.delx.au - gnu-emacs/blobdiff - lisp/time.el
; Revert "Use eldoc-documentation-functions"
[gnu-emacs] / lisp / time.el
index a3bbee0c893fce4e67e1d82f9fc8b696dd1f6684..651dd56779b2496337913d41053d9fbe55df840d 100644 (file)
@@ -1,9 +1,9 @@
-;;; 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-2012
-;;   Free Software Foundation, Inc.
+;; 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.
 
@@ -108,7 +108,10 @@ A value of nil means 1 <= hh <= 12, and an AM/PM suffix is used."
   :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
@@ -160,15 +163,8 @@ LABEL is a string to display as the label of that TIMEZONE's time."
 (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))
@@ -176,7 +172,7 @@ LABEL is a string to display as the label of that TIMEZONE's time."
 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))
@@ -323,8 +319,6 @@ would give mode line times like `94/12/30 21:07:48 (UTC)'."
 
 (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.
@@ -352,8 +346,7 @@ 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))
@@ -474,7 +467,7 @@ update which can wait for the next redisplay."
     ;; 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)))
@@ -526,25 +519,24 @@ See `display-time-world'."
   "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 ()