TL;DR
在customize系统中是否有一些标准的回退处理,用于处理部分无效的复合自定义变量,例如,一个条目不是缺点的列表?
长版
emacs的自定义机制非常强大,因为它将:type参数组合到defcustom,为定制变量提供了一个漂亮的统一接口。
然而,无论出于什么原因,变量的一个条目都是错误的,整个系统就会崩溃,它只会显示简单的s-表达式。因此,对于删除自定义,希望默认值与类型描述匹配,那么就没有任何帮助来修复这个expect。
至少到目前为止,这就是我所经历的。
如果我有一个自定义变量,它是一个复杂的数据结构,是否有某种机制允许只将变量的损坏部分显示为一个裸的s表达式?
想一想
(defcustom x
'((org-mode . "a\\|b")
(text-mode . "b\\|c"))
"Some variable"
:group 'x
:type '(repeat
(cons :tag "Entry"
(function :tag "Mode" :value text-mode)
(regexp))))通常,M-x customize-variable x不会显示一个很好的输入掩码。
Hide X:
INS DEL Entry:
Mode: org-mode
Regexp: a\|b
INS DEL Entry:
Mode: text-mode
Regexp: b\|c
INS
State : STANDARD.
Some variable
Groups: X当我现在做了
(add-to-list 'x 1)该掩码对用户的友好性大大降低。
Hide x:
'(1
(org-mode . "a\\|b")
(text-mode . "b\\|c"))
State : CHANGED outside Customize. (mismatch)
Some variable
Groups: X当然,现在我可以通过将定义更改为以下内容来包含一个备用选项
(defcustom x
'((org-mode . "a\\|b")
(text-mode . "b\\|c"))
"Some variable"
:group 'x
:type '(repeat
(choice
(cons :tag "Entry"
(function :tag "Mode" :value text-mode)
(regexp))
(sexp :tag "MISMATCHED ENTRY!")))),它提供自定义掩码。
Hide X:
INS DEL Choice: Value Menu MISMATCHED ENTRY!: 1
INS DEL Choice: Value Menu Entry:
Mode: org-mode
Regexp: a\|b
INS DEL Choice: Value Menu Entry:
Mode: text-mode
Regexp: b\|c
INS
State : CHANGED outside Customize.
Some variable
Groups: X然而,这现在包括了一个尴尬的下拉菜单,它给用户在条目和无效值之间的选择。相反,我会在默认情况下隐藏下拉值,只有在与有效选项不匹配时才会显示。作为一个用户,我的第一个想法就是“”。
在定制系统中是否有一些标准的方法来处理部分无效值?我在文件里找不到任何东西。
1-1- node/elisp/Customization-Types.html#Customization-Types
发布于 2013-06-27 15:16:10
您可以编辑(并保存)显示的“原始性”。我同意,如果使用通常的小部件显示有效的部件,并且只有无效的部分显示为“原始的sexp”,那就更好了。欢迎补丁。
发布于 2018-05-21 16:18:25
您可能希望使用/实现小部件的:validate。
来自Emacs 5种基本类型(用C-h i m Widget RET m Basic RET阅读):
‘:验证一个函数,该函数接受一个小部件作为参数,如果小部件的当前值对小部件有效,则返回’nil‘。否则,它应该返回包含无效数据的小部件,并将该小部件的“:error”属性设置为解释错误的字符串。 可以使用下列预定义函数: -函数:小部件-子-验证小部件的所有“:子”都必须有效。
在您的示例中,所有正在使用的小部件都应该实现:validate,因此您只需要应用它。
https://stackoverflow.com/questions/17344328
复制相似问题