1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-03 11:33:37 +00:00

Tweaks to the color widget (Bug#45829)

* lisp/wid-edit.el (widget-color-match, widget-color-validate): New
functions.
(color): Use the new functions.  Base size on longest defined color
name, defaulting to the longest RGB hex string.
This commit is contained in:
Drew Adams 2021-01-19 09:11:18 -03:00 committed by Mauro Aranda
parent b62a1e358b
commit ba0cf1d701

View File

@ -4026,17 +4026,19 @@ is inline."
;;; The `color' Widget.
;; Fixme: match
(define-widget 'color 'editable-field
"Choose a color name (with sample)."
:format "%{%t%}: %v (%{sample%})\n"
:value-create 'widget-color-value-create
:size 10
:size (1+ (apply #'max 13 ; Longest RGB hex string.
(mapcar #'length (defined-colors))))
:tag "Color"
:value "black"
:completions (or facemenu-color-alist (defined-colors))
:sample-face-get 'widget-color-sample-face-get
:notify 'widget-color-notify
:match #'widget-color-match
:validate #'widget-color-validate
:action 'widget-color-action)
(defun widget-color-value-create (widget)
@ -4085,6 +4087,19 @@ is inline."
(overlay-put (widget-get widget :sample-overlay)
'face (widget-apply widget :sample-face-get))
(widget-default-notify widget child event))
(defun widget-color-match (_widget value)
"Non-nil if VALUE is a defined color or a RGB hex string."
(and (stringp value)
(or (color-defined-p value)
(string-match-p "^#\\(?:[[:xdigit:]]\\{3\\}\\)\\{1,4\\}$" value))))
(defun widget-color-validate (widget)
"Check that WIDGET's value is a valid color."
(let ((value (widget-value widget)))
(unless (widget-color-match widget value)
(widget-put widget :error (format "Invalid color: %S" value))
widget)))
;;; The Help Echo