我最近在我的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设置变量?
答案 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之前就是这种情况。)