如何在Emacs Lisp中以编程方式设置自定义变量?

14

在Emacs中,当您通过M-x customize设置某些变量时,它们具有特殊的行为,但是如果您通过setq设置相同的变量,则不会触发这些行为。是否有一种编程方式可以设置这些变量,以便触发类似用户通过customize设置变量时的特殊行为?

此外,是否有一种函数可以编程方式将值保存到用户的自定义文件中?我正在尝试实现一种功能,重新添加默认元素到列表中,而不会删除用户添加的元素。


1
你是否在寻找“custom-set-variables”?这正是通常在你的“.emacs”文件中所拥有的。 - nickie
2个回答

15

customize-set-variable是你想要的,不是custom-set-variables(这里不需要)。

通常情况下,还可以查看变量(用户选项)的defcustom,以了解其:set插槽等功能。虽然不必要,但在尝试编程设置值之前了解这些功能是很有帮助的。

对于一个关于help-gnu-emacs@gnu.org的问题,下面的回复也可能会有所帮助: http://lists.gnu.org/archive/html/help-gnu-emacs/2013-08/msg00544.html


更新:

你后来编辑了你的问题,询问如何保存新值。你可以使用customize-save-variable。它设置并保存新值。


没错,这就是我想要的,因为它使用了 :set 属性来设置变量。 - Ryan C. Thompson
2
为了记录:如果您想以编程方式设置自定义变量并将新值保存到未来的会话中,那么custom-save-variable就是您想要的函数;它的签名与custom-set-variable完全相同,唯一的区别在于将新值作为custom-set-variables表单写入用户的自定义文件。 - Aaron Miller
@HelloGoodbye:1. custom-set-variables 不会在 用户通过自定义设置变量后 执行操作,它既设置又保存值。您可以使用它来回答稍后提出的第二个问题(作为更新)。2. 这里不需要 custom-set-variablescustom-save-variables 的通用性。当然您可以使用它们,但没必要。实际上有几个 custom-*customize-* 函数,具体取决于您想要做什么。而且 customize-* 函数也是命令,因此您可以交互地使用它们。 - Drew
@Drew,设置值和保存值有什么区别?在Emacs中,保存值的方法是将其添加到您的.emacs文件中,对吗(这至少是从“选项”菜单中选择“保存选项”时发生的事情)?因此,如果您在.emacs文件中使用customize-set-variable,那么该值是否也被实质上保存了呢? - HelloGoodbye
@Drew,你的回答让我有点困惑。首先,你说“自定义”不会保存新值,然后又说它会保存到你的初始化文件中。这两种情况不能同时成立。 - HelloGoodbye
显示剩余3条评论

0

使用函数default-value,然后跟随所提到的custom-set-variable可能会解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接