1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-30 04:10:54 -08:00

Add 'custom-variable' command

* lisp/cus-edit.el (customize-toggle-option): Add command.
(toggle-option): Add shorter alias for 'customize-toggle-option'.
* etc/NEWS: Document it.  (Bug#69079)
This commit is contained in:
Philip Kaludercic 2024-02-12 18:29:50 +01:00
parent 10bf810e84
commit 371ccf09fe
2 changed files with 39 additions and 0 deletions

View file

@ -1336,6 +1336,10 @@ in Buffer menu mode.
*** New command 'customize-dirlocals'.
This command pops up a buffer to edit the settings in ".dir-locals.el".
---
** New command 'customize-toggle-option'.
This command can toggle boolean options for the duration of a session.
** Calc
+++

View file

@ -1227,6 +1227,41 @@ If OTHER-WINDOW is non-nil, display in another window."
(unless (eq symbol basevar)
(message "`%s' is an alias for `%s'" symbol basevar))))
;;;###autoload
(defun customize-toggle-option (symbol)
"Toggle the value of boolean option SYMBOL for this session."
(interactive (let ((prompt "Toggle boolean option: ") opts)
(mapatoms
(lambda (sym)
(when (eq (get sym 'custom-type) 'boolean)
(push sym opts))))
(list (intern (completing-read prompt opts nil nil nil nil
(symbol-at-point))))))
(let* ((setter (or (get symbol 'custom-set) #'set-default))
(getter (or (get symbol 'custom-get) #'symbol-value))
(value (condition-case nil
(funcall getter symbol)
(void-variable (error "`%s' is not bound" symbol))))
(type (get symbol 'custom-type)))
(cond
((eq type 'boolean))
((and (null type)
(yes-or-no-p
(format "`%s' doesn't have a type, and has the value %S. \
Proceed to toggle?" symbol value))))
((yes-or-no-p
(format "`%s' is of type %s, and has the value %S. \
Proceed to toggle?"
symbol type value)))
((error "Abort toggling of option `%s'" symbol)))
(message "%s user options `%s'."
(if (funcall setter symbol (not value))
"Enabled" "Disabled")
symbol)))
;;;###autoload
(defalias 'toggle-option #'customize-toggle-option)
;;;###autoload
(defalias 'customize-variable-other-window 'customize-option-other-window)