如何定义仅接受正数的Elisp窗口小部件类型?

时间:2013-09-23 23:31:19

标签: emacs elisp

我希望在我的Emacs包中有一个自定义变量,该变量的唯一有效值是正整数。是否有办法使M-x自定义只接受此变量的正整数并拒绝其他变量?

2 个答案:

答案 0 :(得分:4)

我想出了如何使用自定义变量的:validate属性执行此操作:

(defun widget-positive-integer-validate (widget)
  (let ((v (widget-value widget)))
    (if (natnump v)
        ;; Valid
        nil
      ;; Invalid
      (widget-put widget :error "This field should contain a positive integer")
      widget))))

(defcustom positive-integer-var 5000
  "This variable must be a positive integer."
  :type '(integer :value 5000
                  :validate widget-positive-integer-validate))

答案 1 :(得分:1)

您可能还希望将限制性别用作:type。

:type `(restricted-sexp
        :match-alternatives
        (,(lambda (v) (and (natnump v) (/= v 0))))))

muede