emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master c3835bd: Warn about a bad default value in restricted-sexp widget


From: Lars Ingebrigtsen
Subject: master c3835bd: Warn about a bad default value in restricted-sexp widget
Date: Sat, 24 Oct 2020 15:41:45 -0400 (EDT)

branch: master
commit c3835bd3803e5f395c4ebf0b2585cc9272173548
Author: Mauro Aranda <maurooaranda@gmail.com>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    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).
---
 lisp/wid-edit.el | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index 009c6b4..4e2cf74 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -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))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]