考虑以下 Emacs Lisp 代码,它定义了一个可自定义的变量,该变量可以是文字字符串或正则表达式:
(defcustom myvar "" "String or regexp"
:type '(choice (string :tag "String")
(regexp :tag "Regexp")))
这在自定义界面中工作得很好(customize-variable 'myvar)
,但是就无法判断变量是设置为字符串还是正则表达式。即使是自定义界面,无论如何也认为它是一个字符串。如果您使用自定义将变量设置为正则表达式,然后关闭并重新打开该变量的自定义缓冲区,它将再次说它是一个字符串。
那么,有什么方法可以消除歧义,以确保当变量通过自定义设置为正则表达式时,我的代码可以确定它是正则表达式而不是简单的字符串?
理想情况下,我希望某种机制将字符串在内部存储为(cons 'string VALUE)
,其中 VALUE 是用户键入的字符串,并且类似地将正则表达式在内部存储为(cons 'regexp VALUE)
.
编辑
从我的搜索中,我找到了你可以提供给的:value-to-internal
和:value-to-external
属性define-widget
,但是当我尝试自定义生成的变量时,我无法弄清楚如何以一种不会导致错误的方式使用它们。