用法是什么:在defcustom中键入?

时间:2014-03-21 02:09:24

标签: emacs customization

我不确定我是否理解type中的属性defcustom。我可以完美地定义以下变量而不符合type。在这种情况下type的目的是什么?

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

3 个答案:

答案 0 :(得分:3)

正如Elisp手册(节点Variable Definitions)所说: 它指定哪些值合法,以及如何显示值。 &#34; < / p>

正如@amalloy所说,这会影响&#34;用户使用&#34;进行自定义的适当编辑控制。它还会影响Customize是否将当前值显示为:type的有效值或类型不匹配。

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

答案 1 :(得分:3)

首先,整数的类型为integer,而不是int,因此您的具体示例不适用于自定义。

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

编辑控件

M-x customize-variable选择一个最适合输入预期类型值的编辑控件。例如,boolean类型变为切换按钮,简单类型变为integerstring进行线条编辑,choice变为值菜单,set a复选框列表等。

完成

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

类型检查

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

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

答案 2 :(得分:1)

设置:type会导致customize-variable显示适当的编辑控件,供用户自定义。