]> git.eshelyaron.com Git - emacs.git/commitdiff
Respect :must-match for file types in customization buffers
authorMauro Aranda <maurooaranda@gmail.com>
Sun, 30 Aug 2020 13:55:19 +0000 (15:55 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sun, 30 Aug 2020 15:03:11 +0000 (17:03 +0200)
* lisp/wid-edit.el (file widget): Add a :match and a :validate
function to the 'file widget, to be able to check if the widget
value is an existent file, when required (bug#25678).

lisp/wid-edit.el

index ea7e266e0d0e54f4347afff820a279718db00a3f..f58a0fb7a3a439e08142e3cbd6387dc0129ae0a5 100644 (file)
@@ -3161,6 +3161,15 @@ It reads a file name from an editable text field."
   :completions (completion-table-case-fold
                 #'completion-file-name-table
                 (not read-file-name-completion-ignore-case))
+  :match (lambda (widget value)
+           (or (not (widget-get widget :must-match))
+               (file-exists-p value)))
+  :validate (lambda (widget)
+              (let ((value (widget-value widget)))
+                (unless (widget-apply widget :match value)
+                  (widget-put widget
+                              :error (format "File %s does not exist" value))
+                  widget)))
   :prompt-value 'widget-file-prompt-value
   :format "%{%t%}: %v"
   ;; Doesn't work well with terminating newline.