summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--etc/NEWS5
-rw-r--r--lisp/custom.el14
2 files changed, 19 insertions, 0 deletions
diff --git a/etc/NEWS b/etc/NEWS
index de10b4a6131..2b3cc80df15 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -782,6 +782,11 @@ have now been removed.
* 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.
diff --git a/lisp/custom.el b/lisp/custom.el
index 885c486c5e4..0cb136330d5 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -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)