summaryrefslogtreecommitdiff
path: root/lisp/time.el
diff options
context:
space:
mode:
authorPaul Eggert <eggert@day>2017-10-02 09:04:46 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2017-10-02 09:06:35 -0700
commit987f39a124af378966dc5832a48599b110bba436 (patch)
treeb6df8857414afb69e864cc93f907359e9d2e811d /lisp/time.el
parent712cc158772697058c1436a6e5bacc00d262f49c (diff)
downloademacs-987f39a124af378966dc5832a48599b110bba436.tar.gz
Fix customization of zoneinfo-style-world-list
A customizable variable's initial value cannot depend on that of another customizable variable, since the variables are initialized in other than textual order. Problem reported by N. Jackson (Bug#24291). * lisp/time.el (display-time-world-list): Default to t, a special value that expands to zoneinfo-style-word-list if that works, and to legacy-style-word-list otherwise. (time--display-world-list): New function. (display-time-world, display-time-world-timer): Use it.
Diffstat (limited to 'lisp/time.el')
-rw-r--r--lisp/time.el31
1 files changed, 20 insertions, 11 deletions
diff --git a/lisp/time.el b/lisp/time.el
index 5c0eac0c208..c8726a9a1b0 100644
--- a/lisp/time.el
+++ b/lisp/time.el
@@ -160,24 +160,33 @@ LABEL is a string to display as the label of that TIMEZONE's time."
:type '(repeat (list string string))
:version "23.1")
-(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 ((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))
+(defcustom display-time-world-list t
"Alist of time zones and places for `display-time-world' to display.
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
-a string to display as the label of that TIMEZONE's time."
+a string to display as the label of that TIMEZONE's time.
+
+If the value is t instead of an alist, use the value of
+`zoneinfo-style-world-list' if it works on this platform, and of
+`legacy-style-world-list' otherwise."
+
:group 'display-time
:type '(repeat (list string string))
:version "23.1")
+(defun time--display-world-list ()
+ (if (listp display-time-world-list)
+ display-time-world-list
+ ;; Determine if zoneinfo style timezones are supported by testing that
+ ;; America/New York and Europe/London return different timezones.
+ (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))))
+
(defcustom display-time-world-time-format "%A %d %B %R %Z"
"Format of the time displayed, see `format-time-string'."
:group 'display-time
@@ -548,7 +557,7 @@ To turn off the world time display, go to that window and type `q'."
(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)
+ (display-time-world-display (time--display-world-list))
(display-buffer display-time-world-buffer-name
(cons nil '((window-height . fit-window-to-buffer))))
(display-time-world-mode)))
@@ -556,7 +565,7 @@ To turn off the world time display, go to that window and type `q'."
(defun display-time-world-timer ()
(if (get-buffer display-time-world-buffer-name)
(with-current-buffer (get-buffer display-time-world-buffer-name)
- (display-time-world-display display-time-world-list))
+ (display-time-world-display (time--display-world-list)))
;; cancel timer
(let ((list timer-list))
(while list