【问题标题】:How do I programatically set a Custom variable in Emacs Lisp?如何以编程方式在 Emacs Lisp 中设置自定义变量?
【发布时间】:2013-08-30 23:31:56
【问题描述】:

在 Emacs 中,某些变量在通过 M-x customize 设置时具有特殊行为,当您通过 setq 设置相同的变量时不会触发这些行为。是否有一种编程方式来设置此类变量,以便触发特殊行为,就好像用户通过自定义设置了变量一样?

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

【问题讨论】:

  • 您在寻找custom-set-variables 吗?这正是您通常在 .emacs 文件中拥有的内容。

标签: emacs elisp customization


【解决方案1】:

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 属性来设置变量。
  • 后人注意:如果您想以编程方式设置自定义变量并为将来的会话保存新值,custom-save-variable 是您想要的功能;它的签名与custom-set-variable 的签名相同,其行为的唯一区别在于还将新值作为custom-set-variables 形式写入用户的自定义文件中。
  • 为什么在这种情况下customize-set-variablecustom-set-variables 更受欢迎?
  • @HelloGoodbye: 1. custom-set-variables 不动作“如果用户通过自定义设置了变量”。它既设置又保存值。您可以使用它来回答提出的第二个问题(稍后作为更新)。 2.这里不需要custom-set-variablescustom-save-variables的通用性。你当然可以使用它们,但你不需要。实际上有几个custom-*customize-* 函数,这取决于你想要做什么。而customize-* 也是命令,所以你可以交互地使用它们。
  • @Drew 设置和保存值有什么区别?在 Emacs 中,保存值的方法是将其添加到您的 .emacs 文件中,对吧(至少当您从 Options 菜单中选择“Save Options”时会发生这种情况)?那么,如果你在你的.emacs 文件中使用customize-set-variable,这个值是不是也基本上被保存了?
【解决方案2】:

使用函数default-value 后跟提到的custom-set-variable 可能会做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 2012-05-22
    • 2013-03-29
    • 2017-12-08
    相关资源
    最近更新 更多