]> git.eshelyaron.com Git - emacs.git/commitdiff
time-stamp-time-zone: update customization
authorStephen Gildea <stepheng+emacs@gildea.com>
Sun, 27 Oct 2019 15:20:13 +0000 (08:20 -0700)
committerStephen Gildea <stepheng+emacs@gildea.com>
Sun, 27 Oct 2019 15:21:16 +0000 (08:21 -0700)
* time-stamp.el (time-stamp-time-zone): Support customization with
an integer offset (a new possible value of the ZONE argument to
format-time-string in Emacs 27).
Update the safe-local-variable predicate from string-or-null-p
(describing time-stamp-time-zone's domain before 2015) to new
predicate time-stamp-zone-type-p (describing the current domain).

* time-stamp-tests.el (time-stamp-test-helper-zone-type-p): New test.

lisp/time-stamp.el
test/lisp/time-stamp-tests.el

index 094ef915265add76c72d364614f71e0c5323649f..6b1ff3e618cf53b6626afa0bfe71a11c5bc9036e 100644 (file)
@@ -109,10 +109,26 @@ Its format is that of the ZONE argument of the `format-time-string' function."
   :type '(choice (const :tag "Emacs local time" nil)
                  (const :tag "Universal Time" t)
                  (const :tag "system wall clock time" wall)
-                 (string :tag "TZ environment variable value"))
+                 (string :tag "TZ environment variable value")
+                 (list :tag "Offset and name"
+                       (integer :tag "Offset (seconds east of UTC)")
+                       (string :tag "Time zone abbreviation"))
+                 (integer :tag "Offset (seconds east of UTC)"))
   :group 'time-stamp
   :version "20.1")
-;;;###autoload(put 'time-stamp-time-zone 'safe-local-variable 'string-or-null-p)
+;;;###autoload(put 'time-stamp-time-zone 'safe-local-variable 'time-stamp-zone-type-p)
+
+;;;###autoload
+(defun time-stamp-zone-type-p (zone)
+  "Return whether or not ZONE is of the correct type for a timezone rule.
+Valid ZONE values are described in the documentation of `format-time-string'."
+  (or (memq zone '(nil t wall))
+      (stringp zone)
+      (and (consp zone)
+           (integerp (car zone))
+           (consp (cdr zone))
+           (stringp (cadr zone)))
+      (integerp zone)))
 
 ;;; Do not change time-stamp-line-limit, time-stamp-start,
 ;;; time-stamp-end, time-stamp-pattern, time-stamp-inserts-lines,
index 92df1839350a309de24bd2b5ed94e84eba0ee735..ad2cb0ead7fc00d1c8077a0f18dc97807437ee94 100644 (file)
@@ -57,6 +57,8 @@
 
 ;;; Tests:
 
+;;; Tests of time-stamp-string formatting
+
 (ert-deftest time-stamp-test-format-day-of-week ()
   "Test time-stamp formats for named day of week."
   (with-time-stamp-test-env
     (should (equal (time-stamp-string "%#3a" ref-time3) "SUN"))
     (should (equal (time-stamp-string "%#3b" ref-time2) "NOV"))))
 
+;;; Tests of helper functions
+
+(ert-deftest time-stamp-test-helper-zone-type-p ()
+  "Test time-stamp-zone-type-p."
+  (should (time-stamp-zone-type-p t))
+  (should (time-stamp-zone-type-p nil))
+  (should (time-stamp-zone-type-p 'wall))
+  (should-not (time-stamp-zone-type-p 'floor))
+  (should (time-stamp-zone-type-p "arbitrary string"))
+  (should (time-stamp-zone-type-p 0))
+  (should-not (time-stamp-zone-type-p 3.14))
+  (should-not (time-stamp-zone-type-p '(0)))
+  (should-not (time-stamp-zone-type-p '(0 . "A")))
+  (should (time-stamp-zone-type-p '(0 "A")))
+  (should-not (time-stamp-zone-type-p '(0 0)))
+  (should-not (time-stamp-zone-type-p '("A" "A"))))
+
 ;;; time-stamp-tests.el ends here