2016-03-21 39 views
1

我最近在OSX機器上從24.1升級了Emacs 24.5.1。我使用原生的Cocoa Emacs應用程序。M-x設置變量在Emacs中不起作用24.5.1

自升級以來,我一直無法使用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設置變量嗎?

回答

3

的回答你的問題是,什麼事情也改變Emacs的24.5,打破這個功能。更確切地說,Emacs 24.3引入了破解,而不是24.5。

在Emacs 24.3之前(也就是幾十年!),只需將*作爲文檔字符串的第一個字符就足以將變量變爲用戶變量,因此可以與set-variable一起使用。 (該*不會顯示爲所顯示的文檔字符串的一部分)

換句話說,之前的Emacs 24.3,你需要做的一切是這樣,才能夠使用M-x set-variable

(defvar foo 42 "*This is a user variable.") 

Emacs放棄這個功能是個好主意嗎?有人認爲是這樣。 (我不知道)


現在的情況是怎樣的?

正如@Thomas所說,set-variable適用於使用defcustom定義的變量。然而,更確切地說,它被定義爲custom-variable-p返回非零的變量。

所以,你仍然可以使用M-x set-variable與使用defvar定義的變量,只要你給它一個非空standard-value特性(這使得它滿足custom-variable-p):

(defvar foo 42 "This is a user variable.") 
    (put 'foo 'standard-value 42) 
+0

感謝您的細節。它解答了我關於24.1和24.5版本之間是否有問題的嘮叨問題。 – Specksynder

1

您的變量應該是用戶選項變量名稱,即意味着由用戶定製的Lisp變量 。因此,使用defcustom代替defvar

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

您可能要拿出一個更好的文檔字符串比在這個例子中,變量。

(這是之前就已經Emacs24的情況。)

+0

大,爲我工作很好。謝謝。 (奇怪的是,用'defvar'定義的變量用於在我的配置中定義一個用戶選項變量名稱,但無論如何,我將在未來使用defcustom) – Specksynder

+0

謝謝,但您能否接受@德魯的答案是正確的?我認爲這比我的好多了。 – Thomas

+0

我曾考慮過這個問題,但是我並不想把我頒發給你的觀點拿出來,因爲我沒有尊重你的觀點。既然這是你的願望,而且由於德魯的答案更加詳細,我會接受他的答覆作爲正確答案。 :-) – Specksynder

相關問題