In emacs lisp, various tree structures are common. custom.el
provides through the :type
argument to defcustom
a standard way to define the expected shape of customization variables. But is there a standard way to verify the structure of some random emacs lisp value?
Lets say, I have a list of the form
LIST = (ENTRY ...)
ENTRY = (NAME . ((1 VAL1) (2 VAL2) ...))
can I somehow define that structure similiar to a customization type and then check against that structure definition?
In file lisp/wid-edit.el
there is this function:
(defun widget-type-match (widget value)
"Non-nil if the :type value of WIDGET matches VALUE.
The value of the :type attribute should be an unconverted widget type."
(widget-apply (widget-convert (widget-get widget :type)) :match value))
which you can adapt to your needs:
(defun my-type-match (type value)
(widget-apply (widget-convert type) :match value))
(my-type-match 'string "foo")
==> t
(my-type-match 'string 10)
==> nil
(my-type-match '(choice (const 1) (const 2) (const t)) 10)
==> nil
(my-type-match '(choice (const 1) (const 2) (const t)) 2)
==> t
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With