比如,我想创建一个widget来收集信息,我看到在wid-edit.el
里定义了:
(define-widget 'integer 'restricted-sexp
"An integer."
:tag "Integer"
:value 0
:type-error "This field should contain an integer"
:match-alternatives '(integer))
想当然的以为创建integer类型的widget会确认输入的数据类型,但在如下的function里,无论是运行(example-widget-form "aa")
还是在生成的buffer表格里输入非integer的数据,都不会报错。如何才能让widget检测输入的数据类型呢?应该是可以的,比如基于widget的defcustom是可以 (defcustom age :type '(integer))
有这个功能的。可能是我没完全搞清楚widget的使用方法……
(defun example-widget-form (&optional default)
"A form with multiple types of widgets."
(interactive)
(switch-to-buffer "*Advanced Widget Form*")
(kill-all-local-variables)
(let ((inhibit-read-only t))
(erase-buffer))
(remove-overlays)
(widget-insert "Advanced Form Example\n\n")
;; Integer field
(setq int-widget (widget-create 'integer
:size 5
:value default
:format "Age: %v "))
;; Submit button
(widget-insert "\n\n")
(widget-create 'push-button
:notify (lambda (&rest ignore)
(message "Age: %S"
(widget-value int-widget)))
"Submit")
(use-local-map widget-keymap)
(widget-setup))
另外,我感觉emacs自带的widget使用得不多,官方文档介绍的也比较简略,大家有找到比较好的帖子或教程么?