1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

Warn about a bad default value in restricted-sexp widget

* lisp/wid-edit.el (restricted-sexp widget): New :value-to-external
function.  If value is not in the internal format, then we might be
dealing with a bad default value for the widget, so display a warning
about that (bug#25152).
This commit is contained in:
Mauro Aranda 2020-10-24 21:40:42 +02:00 committed by Lars Ingebrigtsen
parent dd16e46bb9
commit c3835bd380

View file

@ -3585,7 +3585,30 @@ To use this type, you must define :match or :match-alternatives."
:value-to-internal (lambda (widget value)
(if (widget-apply widget :match value)
(widget-sexp-value-to-internal widget value)
value)))
value))
:value-to-external (lambda (widget value)
;; We expect VALUE to be a string, so we can convert it
;; into the external format just by `read'ing it.
;; But for a restricted-sexp widget with a bad default
;; value, we might end up calling read with a nil
;; argument, resulting in an undesired prompt to the
;; user. A bad default value is not always a big
;; problem, but might end up in a messed up buffer,
;; so display a warning here. (Bug#25152)
(unless (stringp value)
(display-warning
'widget-bad-default-value
(format-message
"\nA widget of type %S has a bad default value.
value: %S
match function: %S
match-alternatives: %S"
(widget-type widget)
value
(widget-get widget :match)
(widget-get widget :match-alternatives))
:warning))
(read value)))
(defun widget-restricted-sexp-match (widget value)
(let ((alternatives (widget-get widget :match-alternatives))