]> git.eshelyaron.com Git - emacs.git/commitdiff
Add new utility function custom-add-choice
authorLars Ingebrigtsen <larsi@gnus.org>
Sat, 8 Aug 2020 11:42:48 +0000 (13:42 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sat, 8 Aug 2020 11:42:48 +0000 (13:42 +0200)
* lisp/custom.el (custom-add-choice): New function (bug#41225).

etc/NEWS
lisp/custom.el

index de10b4a6131ee69953e5a5346b2dbcd7176c0333..2b3cc80df152164a68058b4770166c9546927c84 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -782,6 +782,11 @@ have now been removed.
 \f
 * Lisp Changes in Emacs 28.1
 
+---
+** New function 'custom-add-choice'.
+This function can be used by modes to add elements to the
+'choice' customization type of a variable.
+
 +++
 ** New function 'file-modes-number-to-symbolic' to convert a numeric
 file mode specification into symbolic form.
index 885c486c5e43df18fb66da63762fa9e6ef2e7d1b..0cb136330d5bfdc8d491b16ccd16dd4a062df9eb 100644 (file)
@@ -1541,6 +1541,20 @@ Each of the arguments ARGS has this form:
 This means reset VARIABLE.  (The argument IGNORED is ignored)."
     (apply #'custom-theme-reset-variables 'user args))
 
+(defun custom-add-choice (variable choice)
+  "Add CHOICE to the custom type of VARIABLE.
+If a choice with the same tag already exists, no action is taken."
+  (let ((choices (get 'tab-bar-new-tab-choice 'custom-type)))
+    (unless (eq (car choices) 'choice)
+      (error "Not a choice type: %s" choices))
+    (unless (seq-find (lambda (elem)
+                        (equal (caddr (member :tag elem))
+                               (caddr (member :tag choice))))
+                      (cdr choices))
+      ;; Put the new choice at the end.
+      (put variable 'custom-type
+           (append (get variable 'custom-type) (list choice))))))
+
 ;;; The End.
 
 (provide 'custom)