(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 (gmt nyt)
- (set-time-zone-rule "America/New_York")
- (setq nyt (format-time-string "%z"))
- (set-time-zone-rule "Europe/London")
- (setq gmt (format-time-string "%z"))
- (set-time-zone-rule nil)
+ (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))
(if (string-equal nyt gmt)
legacy-style-world-list
zoneinfo-style-world-list))
"Alist of time zones and places for `display-time-world' to display.
Each element has the form (TIMEZONE LABEL).
-TIMEZONE should be in the format supported by `set-time-zone-rule' on
-your system. See the documentation of `zoneinfo-style-world-list' and
-\`legacy-style-world-list' for two widely used formats.
-LABEL is a string to display as the label of that TIMEZONE's time."
+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
+a string to display as the label of that TIMEZONE's time."
:group 'display-time
:type '(repeat (list string string))
:version "23.1")
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)
;;;###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)
(defun display-time-world-display (alist)
"Replace current buffer text with times in various zones, based on ALIST."
(let ((inhibit-read-only t)
- (buffer-undo-list t))
+ (buffer-undo-list t)
+ (old-tz (getenv "TZ"))
+ (max-width 0)
+ result fmt)
(erase-buffer)
- (let ((max-width 0)
- (result ())
- fmt)
- (unwind-protect
- (dolist (zone alist)
- (let* ((label (cadr zone))
- (width (string-width label)))
- (set-time-zone-rule (car zone))
- (push (cons label
- (format-time-string display-time-world-time-format))
- result)
- (when (> width max-width)
- (setq max-width width))))
- (set-time-zone-rule nil))
- (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)))
+ (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))
+ (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))
;;;###autoload
(defun display-time-world ()