簡體   English   中英

如何在Elisp自定義聲明中消除字符串和正則表達式的歧義?

[英]How can I disambiguate strings and regexps in Elisp custom declarations?

考慮以下Emacs Lisp代碼,該代碼定義了一個可定制變量,該變量可以是文字字符串或正則表達式:

(defcustom myvar "" "String or regexp"
  :type '(choice (string :tag "String")
                 (regexp :tag "Regexp")))

這在Custom界面(customize-variable 'myvar)工作得很好,但是隨后就無法判斷變量是設置為字符串還是正則表達式。 甚至Custom接口都認為這是一個字符串,無論如何。 如果使用“自定義”將變量設置為正則表達式,然后關閉並重新打開該變量的“自定義”緩沖區,它將再次表示它是字符串。

因此,是否有任何方法可以消除歧義,以確保當通過Custom將變量設置為regexp時,我的代碼可以確定它是regexp而不是簡單的字符串?

理想情況下,我希望某種機制將字符串內部存儲為(cons 'string VALUE) ,其中VALUE是用戶鍵入的字符串,類似地,將regexp內部存儲為(cons 'regexp VALUE)

編輯

通過搜索,我發現了可以提供給define-widget:value-to-internal:value-to-external屬性,但是我不知道如何以一種不會使用的方式使用它們嘗試自定義結果變量時導致錯誤。

help-gnu-emacs改寫我的答案-

請執行建議的操作:使用cons代替字符串。

您需要某種方式以編程方式將任意文本與用作正則表達式的文本區分開。 您知道在自定義時間的意圖:用戶選擇一個或另一個。

您需要確保用戶選擇導致不同(可區別)的值。 cons記錄(a)文本和(b)類型/選擇/使用是一個很好的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM