branch: elpa/datetime
commit 6a2b667178f718595d604af348f7aa27241d2a0d
Author: Paul Pogonyshev <[email protected]>
Commit: Paul Pogonyshev <[email protected]>
Implement proper completion when customizing `datetime-locale' and
`datetime-timezone'.
---
datetime.el | 53 +++++++++++++++++++++++++++--------------------------
1 file changed, 27 insertions(+), 26 deletions(-)
diff --git a/datetime.el b/datetime.el
index 5aed1a72e1..87c9a990ef 100644
--- a/datetime.el
+++ b/datetime.el
@@ -155,13 +155,34 @@
(defvar datetime--pattern-formatters '((parsed . (lambda (parts options)
parts))
(java .
datetime--format-java-pattern)))
+;; `datetime-list-*' must be defined here, since they are used in
+;; `defcustom' forms below.
+(defun datetime-list-locales (&optional include-variants)
+ "List all locales for which the library has information.
+If INCLUDE-VARIANTS is nil, only include “base” locales (in
+format \"xx\"), if it is t then also include “variants” in format
+\"xx-YY\".
+
+Return value is a list of symbols in no particular order; it can
+be modified freely."
+ (if include-variants
+ (extmap-keys datetime--locale-extmap)
+ (let (locales)
+ (extmap-mapc datetime--locale-extmap (lambda (locale data) (unless
(plist-get data :parent) (push locale locales))))
+ locales)))
+
+(defun datetime-list-timezones ()
+ "List all timezones for which the library has information.
+
+Return value is a list of symbols in no particular order; it can
+be modified freely."
+ (extmap-keys datetime--timezone-extmap))
+
(defgroup datetime nil
"Date-time handling library."
:group 'i18n)
-;; Unfortunately I see no way to provide completion from a non-fixed
-;; set of options.
(defcustom datetime-locale nil
"Default locale for date-time formatting and parsing.
Leave unset to let the library auto-determine it from your OS
@@ -172,7 +193,9 @@ evaluating this form:
(prin1-to-string (sort (datetime-list-locales t) #\\='string<))"
:group 'datetime
- :type '(restricted-sexp :match-alternatives ((lambda (value) (or (null
value) (extmap-contains-key datetime--locale-extmap value))))))
+ ;; The only minor problem is the type won't be rebuilt if
`datetime--locale-extmap' is
+ ;; autoreloaded, but oh well.
+ :type `(choice (const nil) ,@(mapcar (lambda (locale) `(const ,locale))
(datetime-list-locales t))))
(defcustom datetime-timezone nil
"Default timezone for date-time formatting and parsing.
@@ -184,7 +207,7 @@ form:
(prin1-to-string (sort (datetime-list-timezones) #\\='string<))"
:group 'datetime
- :type '(restricted-sexp :match-alternatives ((lambda (value) (or (null
value) (extmap-contains-key datetime--timezone-extmap value))))))
+ :type `(choice (const nil) ,@(mapcar (lambda (locale) `(const ,locale))
(datetime-list-timezones))))
(defun datetime--get-locale (options)
@@ -1474,28 +1497,6 @@ options can affect result of this function."
(datetime--pattern-includes-p type pattern options timezone))
-(defun datetime-list-locales (&optional include-variants)
- "List all locales for which the library has information.
-If INCLUDE-VARIANTS is nil, only include “base” locales (in
-format \"xx\"), if it is t then also include “variants” in format
-\"xx-YY\".
-
-Return value is a list of symbols in no particular order; it can
-be modified freely."
- (if include-variants
- (extmap-keys datetime--locale-extmap)
- (let (locales)
- (extmap-mapc datetime--locale-extmap (lambda (locale data) (unless
(plist-get data :parent) (push locale locales))))
- locales)))
-
-(defun datetime-list-timezones ()
- "List all timezones for which the library has information.
-
-Return value is a list of symbols in no particular order; it can
-be modified freely."
- (extmap-keys datetime--timezone-extmap))
-
-
(defsubst datetime--do-get-locale-pattern (patterns variant)
(or (plist-get patterns variant)
(unless (eq variant :medium) (plist-get patterns :medium))