2016-03-21 3 views
1

最近、私のOSXマシン上でEmacs 24.5.1を24.1からアップグレードしました。私はネイティブのCocoa Emacsアプリケーションを使用します。M-x set-variableがEmacs 24.5.1で動作しない

アップグレードのため、M-x set-variableを使用して変数の値を変更できませんでした。変数は、構文で私の.emacsに定義されています。上記の定義では

(defvar project-root-directory nil) 

、Emacsが起動し、私はM-x set-variableは、Emacsはproject-root-directory変数が存在しないと文句を言い打ったとき.emacsファイルは、エラーなしでロードされた後。

Emacs 24.5でdefvar構文が変更され、M-xを使って変数を設定できないのですか?

答えて

3

あなたの質問への答えはイエスで、何かがこの機能を破ったのEmacs 24.5の変更を行いました。より正確には、破損は24.5ではなくEmacs 24.3で導入されました。

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が非nilを返す変数に対して定義されます。私のためによく働いている、

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

詳細をありがとう。それは、24.1と24.5の間で何かが壊れていたかどうかについてのちょっとした疑問に答えるものです。 – Specksynder

1

変数はユーザーオプション変数名、つまりユーザーによってカスタマイズされることを目的としたLisp変数 でなければなりません。したがって、defvarの代わりにdefcustomを使用します。

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

あなたはこの例では1よりも変数のためのより良いドキュメンテーション文字列を思い付くしたい場合があります。

(これはすでに前Emacs24のケースだった。)

+0

グレート:

だからあなたはまだあなたが(これは、それがcustom-variable-pを満足させ)、それを非nilのstandard-value性を付与提供し、defvarを使用して定義された変数でM-x set-variableを使用することができます。ありがとう。 (私の設定では、ユーザオプションの変数名を定義するために 'defvar'で定義された変数が以前の設定で使用されていましたが、とにかくdefcustomを将来使用します) – Specksynder

+0

ありがとうございます。私はそれが私よりはるかに良いと思う。 – Thomas

+0

私はそれについて考えていましたが、最初の尊敬の念からあなたに与えたポイントを取り除きたくありませんでした。それはあなたの願いであり、ドリューの答えがより詳細なので、私は彼の答えを正しい答えとして受け入れます。 :-) – Specksynder

関連する問題