1

考虑以下 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,但是当我尝试自定义生成的变量时,我无法弄清楚如何以一种不会导致错误的方式使用它们。

4

1 回答 1

1

从help-gnu-emacs改写我的回答——

做你的建议:使用 acons而不是字符串。

您需要某种方式以编程方式将任意文本与用作正则表达式的文本区分开来。您知道在定制时的意图:用户选择一个或另一个。

您需要确保用户选择会产生不同的(可区分的)值。录音( a cons)文本和(b)类型/选择/使用是一个很好的方法。

于 2013-08-26T04:10:47.310 回答