Emacs 输入defcustom的用法是什么?

Emacs 输入defcustom的用法是什么?,emacs,customization,Emacs,Customization,我不确定我是否理解defcustom中的属性type。我可以完美地定义以下变量,而不必遵循类型。在这种情况下,类型的目的是什么 (defcustom foo 1 "foo" :type 'string) (defcustom spam "a" "foo" :type 'integer) 设置:键入会导致自定义变量为用户提供适当的编辑控件进行自定义。正如Elisp手册(节点变量定义)所述:它指定哪些值是合法的,以及如何显示值。” 正如@amalloy所说,这会影响“为用户自定义的适当编辑控件”。

我不确定我是否理解
defcustom
中的属性
type
。我可以完美地定义以下变量,而不必遵循
类型
。在这种情况下,
类型
的目的是什么

(defcustom foo 1 "foo" :type 'string)
(defcustom spam "a" "foo" :type 'integer)

设置
:键入
会导致
自定义变量
为用户提供适当的编辑控件进行自定义。

正如Elisp手册(节点
变量定义
)所述:它指定哪些值是合法的,以及如何显示值。

正如@amalloy所说,这会影响“为用户自定义的适当编辑控件”。它还会影响“自定义”是否将当前值显示为对
:type
有效或类型不匹配


总之,它为用户提供类型检查和编辑帮助,并确定Customize如何显示值(作为Lisp值、布尔值等)。

首先,integer的类型是
integer
,而不是
int
,因此您的特定示例无法使用Customize

:type
确定使用的编辑控件,并在保存自定义项时提供完成和类型检查:

编辑控件
M-x自定义变量
选择最适合为预期类型输入值的编辑控件。例如,
boolean
类型成为切换按钮,简单类型为
integer
string
获取行编辑,
选项
成为值菜单,
设置
复选框列表,例如tc

完成 在某些编辑控件中,自定义提供完成。例如,当您在
函数
类型的行编辑中按
M-Tab
时(用于钩子变量),自定义自动完成函数名。如果有多个匹配名称,您将看到一个包含所有完成候选项的弹出缓冲区。同样,
color
小部件为您提供所有已知颜色名的完成

类型检查 对于所有编辑控件,“自定义”会在保存前检查当前值的类型,并拒绝应用任何不匹配类型的自定义


例如,如果您在
integer
小部件中输入非数字,并尝试应用或保存自定义,Customize将拒绝这样做,并发出信号“此字段应包含整数”错误。

似乎无论使用什么
类型
自定义变量
@RNA都没有什么不同,请尝试使用更复杂的值(例如
选择
重复
)。此外,
自定义变量
在向
整型
字段中输入字符串时应拒绝保存。它是
'integer
,而不是
'int
。有关更多详细信息,请参阅Emacs Lisp手册的一节。有关更多详细信息,请参阅Emacs Lisp手册的一节。@chwarr:当然。感谢添加该链接.