gpt4 book ai didi

emacs - 使用 defcustom 创建可自定义的值时,如何验证用户的输入?

转载 作者:行者123 更新时间:2023-12-04 19:13:42 24 4
gpt4 key购买 nike

我正在编写一个正在演变成包的 elisp 文件,因此我将其中的一些变量转换为 defcustom声明并记录下来。其中一些 defcustom变量是相关的,我想验证通过自定义系统输入的值以确保这些关系成立。

这是我所拥有的一个例子:

(defcustom widget-canonical-names '("my_widget" . "widget_assembly 8911_j4")
"Documentation"
:type '(alist :key-type (string :tag "Widget's short name")
:value-type (string :tag "Full widget name"))
:risky nil
:group 'widgets)
(defcustom widget-colors '("my_widget" . "brown")
"Documentation"
:type '(alist :key-type (string :tag "Widget's short name")
:value-type (color :tag "color of the widget"))
:risky nil
:group 'widgets)
(defcustom widget-paths '("my_widget" . "~/widgets")
"Documentation"
:type '(alist :key-type (string :tag "Widget's short name")
:value-type (directory :tag "support files for widget"))
:risky nil
:group 'widgets)

所以有小部件,它们有各种设置,我需要能够通过只知道小部件的短名称来访问小部件的任意设置。我想做某种验证功能(不幸的是,搜索“emacs defcustom validate”并没有帮助),这样如果用户在 widget-paths 中输入小部件名称或 widget-colors这不在 widget-canonical-names 中列表,他们会得到一个“你确定吗?”警告并注意输入不匹配的名称。我可以将这样的验证功能附加到我的 defcustom 吗? ?如果是这样,它的语法是什么?

当然,理想的做法是让用户输入一次短名称,但我无法从“复合类型”elisp 文档中弄清楚如何做到这一点。因此,对我的问题更好的答案会告诉我如何安排 defcustom它设置了一个类似于这个 Python dict 的数据结构:

customized_widgets = {
"my_widget": { "canonical_name": "widget_assembly 8911_j4",
"widget_color": "brown",
"widget_path": "~/widgets",
},
"another_widget": { "canonical_name" : "widget_obsolete 11.0",
"widget_color": "blue",
"widget_path": "~/blue_widgets",
},
}

那么:我怎样才能获得我想要的行为,根据将用于访问它们的数据对设置进行分组,或者在用户可能输入不一致数据时验证功能在哪里警告用户?

最佳答案

这将定义与该 Python 结构最接近的 Emacs 等价物,其中 dict 表示为 alist,而内部 dict 的固定键表示为符号。

(defcustom my-customized-widgets ()
"My widget customization alist"
:type '(alist
:tag "Widgets"
:key-type (string :tag "Short name")
:value-type
(set
:format "%v"
:entry-format "%b %v"
(cons :format "%v"
(const :format "" widget-canonical-name)
(string :tag "CName"))
(cons :format "%v"
(const :format "" widget-color)
(color :tag "Color"))
(cons :format "%v"
(const :format "" widget-path)
(directory :tag " Path"))))
:group 'widgets)

关于emacs - 使用 defcustom 创建可自定义的值时,如何验证用户的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12414250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com