Give a warning if setopt has been used with an invalid value
* lisp/cus-edit.el (setopt--set): Mark the variable for checking. * lisp/custom.el (custom-initialize-reset): Give a warning if the type is wrong (bug#56400). * lisp/wid-edit.el (widget-convert): Autoload.
This commit is contained in:
parent
99872bedf0
commit
6d8638e5e4
3 changed files with 12 additions and 0 deletions
|
@ -1075,6 +1075,7 @@ plain variables. This means that `setopt' will execute any
|
|||
(when-let ((type (get variable 'custom-type)))
|
||||
(unless (widget-apply (widget-convert type) :match value)
|
||||
(user-error "Value `%S' does not match type %s" value type)))
|
||||
(put variable 'custom-check-value (list value))
|
||||
(funcall (or (get variable 'custom-set) #'set-default) variable value))
|
||||
|
||||
;;;###autoload
|
||||
|
|
|
@ -90,6 +90,16 @@ The value is either the symbol's current value
|
|||
(as obtained using the `:get' function), if any,
|
||||
or the value in the symbol's `saved-value' property if any,
|
||||
or (last of all) the value of EXP."
|
||||
;; If this value has been set with `setopt' (for instance in
|
||||
;; ~/.emacs), we didn't necessarily know the type of the user option
|
||||
;; then. So check now, and issue a warning if it's wrong.
|
||||
(when-let ((value (get symbol 'custom-check-value))
|
||||
(type (get symbol 'custom-type)))
|
||||
(when (and (boundp symbol)
|
||||
(eq (car value) (symbol-value symbol))
|
||||
;; Check that the type is correct.
|
||||
(not (widget-apply (widget-convert type) :match (car value))))
|
||||
(warn "Value `%S' for `%s' does not match type %s" value symbol type)))
|
||||
(funcall (or (get symbol 'custom-set) #'set-default-toplevel-value)
|
||||
symbol
|
||||
(condition-case nil
|
||||
|
|
|
@ -880,6 +880,7 @@ The child is converted, using the keyword arguments ARGS."
|
|||
"Make a deep copy of WIDGET."
|
||||
(widget-apply (copy-sequence widget) :copy))
|
||||
|
||||
;;;###autoload
|
||||
(defun widget-convert (type &rest args)
|
||||
"Convert TYPE to a widget without inserting it in the buffer.
|
||||
The optional ARGS are additional keyword arguments."
|
||||
|
|
Loading…
Add table
Reference in a new issue