次の Emacs Lisp コードを考えてみましょう。このコードは、リテラル文字列または正規表現のいずれかになるカスタマイズ可能な変数を定義しています。
(defcustom myvar "" "String or regexp"
:type '(choice (string :tag "String")
(regexp :tag "Regexp")))
これは Custom インターフェイス(customize-variable 'myvar)
では問題なく機能しますが、変数が文字列に設定されているか正規表現に設定されているかを判別できなくなります。Custom インターフェイスでさえ、何があっても文字列であると考えています。カスタムを使用して変数を正規表現に設定し、変数のカスタム バッファを閉じて再度開くと、再び文字列であると表示されます。
だから、これを明確にする方法はありますか? カスタムを介して変数が正規表現に設定されている場合、私のコードは、それが単純な文字列ではなく正規表現であることを意図していると判断できますか?
理想的には、文字列を として内部的に格納する何らかのメカニズムが必要(cons 'string VALUE)
です。ここで、 VALUE はユーザーが入力する文字列であり、同様に正規表現を として内部的に格納し(cons 'regexp VALUE)
ます。
編集
検索の結果、 に指定できる:value-to-internal
および:value-to-external
プロパティが見つかりましたdefine-widget
が、結果の変数をカスタマイズしようとしたときにエラーが発生しない方法でそれらを使用する方法がわかりません。