From c3a6bcac86fd386a31a3287a9818aa7c3568769c Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Sat, 8 Aug 2020 13:42:48 +0200 Subject: [PATCH] Add new utility function custom-add-choice * lisp/custom.el (custom-add-choice): New function (bug#41225). --- etc/NEWS | 5 +++++ lisp/custom.el | 14 ++++++++++++++ 2 files changed, 19 insertions(+) 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) -- 2.39.2