M-x set-variable在Emacs 24.5.1中不起作用

时间:2016-03-21 14:10:05

标签: emacs

我最近在我的OSX机器上从24.1升级了Emacs 24.5.1。我使用原生的Cocoa Emacs应用程序。

自升级以来,我无法使用M-x set-variable来更改变量的值。该变量在我的.emacs中定义,语法为:

(defvar project-root-directory nil)

根据上面的定义,在Emacs启动并加载.emacs文件时没有错误,当我点击M-x set-variable时,Emacs会抱怨project-root-directory变量不存在。

Emacs 24.5中的defvar语法是否有任何改变,不允许使用M-x设置变量?

2 个答案:

答案 0 :(得分:3)

您的问题的答案是,Emacs 24.5的某些内容确实发生了变化,从而破坏了此功能。更准确地说,破损是在Emacs 24.3中引入的,而不是24.5。

在Emacs 24.3之前(也就是几十年!),只需将<search:options>作为doc字符串的第一个字符,就可以将变量变成用户变量,因此可以使用它与*。 (set-variable未显示为显示的文档字符串的一部分。)

换句话说,在Emacs 24.3之前,你需要做的只是这个,才能使用*

M-x set-variable

Emacs放弃此功能是一个好主意吗?有些人这么认为。 (我不是。)

目前情况如何?

正如@Thomas所说,(defvar foo 42 "*This is a user variable.") 适用于使用set-variable定义的变量。但更确切地说,它是为defcustom返回非零的变量定义的。

因此,您仍然可以将custom-variable-p与使用M-x set-variable定义的变量一起使用,前提是您为其提供了非零defvar属性(这使其满足standard-value ):

custom-variable-p

答案 1 :(得分:1)

您的变量应该是用户选项变量名称,即Lisp变量 意味着由用户定制。因此,请使用defcustom代替defvar

(defcustom project-root-directory nil
  "The root directory of the project.")

您可能希望为变量提供比此示例中更好的文档字符串。

(在Emacs24之前就是这种情况。)