X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/5244bc019bf7376caff3bb198ff674e0ad9fb0e6..6dc0bafd5915b01a341cc0efbc744abd73163872:/lisp/time.el diff --git a/lisp/time.el b/lisp/time.el index a3bbee0c89..651dd56779 100644 --- a/lisp/time.el +++ b/lisp/time.el @@ -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 ()