【问题标题】:what is the usage of :type in defcustom?defcustom 中的:type 有什么用?
【发布时间】:2014-03-21 02:09:23
【问题描述】:

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

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

【问题讨论】:

  • 这是'integer,而不是'int

标签: emacs customization


【解决方案1】:

正如 Elisp 手册(节点 Variable Definitions)所说:它指定了哪些值是合法的,以及如何显示该值。

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

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

【讨论】:

  • 更多详细信息,请参阅 Emacs Lisp 手册的 Customization Types 部分。
  • @chwarr:当然。感谢您添加该链接。
【解决方案2】:

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

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

编辑控件

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

完成

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

类型检查

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

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

【讨论】:

【解决方案3】:

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

【讨论】:

  • 好像不管type用什么,customize-variable都没有区别
  • @RNA 尝试使用更复杂的值(例如 choicerepeat)。此外,当您在integer 字段中输入字符串时,customize-variable 应该拒绝保存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 2015-04-15
  • 1970-01-01
  • 2016-03-24
相关资源
最近更新 更多