変数varが、カレントバッファーでローカル値をもつようにします。
変数varが、カレントバッファーでグローバル値を使うようにします。
変数varがセットされた時点で、カレントバッファーにたいしてローカルになるようマークします。
ほとんどの変数は、特定のEmacsバッファーにたいしてローカル(local)にすることができます。これは、そのバッファーでの変数の値が、他のバッファーでの変数の値とは、独立していることを意味します。多くはありませんが、常にバッファーごとにローカルな変数もあります。他のすべてのEmacs変数は、バッファーで変数をローカルにしていないかぎりは、すべてのバッファーに効果を及ぼすグローバル(global)な値をもちます。
M-x make-local-variableは変数名を読み取り、それをカレントバッファーにたいしてローカルにします。その後、このバッファーで変数の値を変更しても他のバッファーには影響せず、変数のグローバル値を変更してもこのバッファーには影響しなくなります。
M-x
make-variable-buffer-localは、変数がセットされたとき自動的にローカルになるように、変数をマークします。より正確には、1度この方法で変数がマークされると、通常の方法による変数のセットは、最初に自動的にmake-local-variable
を呼び出します。このような変数をパーバッファー(per-buffer:
バッファーごと)変数と呼びます。Emacsの多くの変数は、通常はパーバッファーです。変数のドキュメント文字列には、いつこれを行なうかが記述されています。パーバッファー変数のグローバル値は、通常は任意のバッファーには影響しませんが、それでもまだ意味があります。グローバル値は、新しいバッファーにたいする、この変数の初期値として使用されます。
メジャーモード(メジャーモードを参照してください)は常に変数をセットする前に、変数をローカルにします。あるバッファーでメジャーモードを変更しても、他のバッファーに影響がないのは、これが理由です。マイナーモードは変数をセットすることにより機能します
— 通常、各マイナーモードは1つの制御変数(controlling
variable)をもっていて、この変数が非nil
の場合はモードが有効になります(マイナーモードを参照してください)。多くのマイナーモードにたいして制御変数はパーバッファーであり、したがって常にバッファーローカルです。そうでない場合、他の変数と同様に特定のバッファーで変数をローカルにできます。
多くはありませんが、バッファーでローカルにできない(かわりに各ディスプレイにたいして常にローカル。複数ディスプレーを参照してください)変数も存在します。そのような変数をバッファーローカルにしようとすると、エラーメッセージが表示されます。
M-x kill-local-variableは、指定された変数が、カレントバッファーにたいしてローカルであることを終了させます。その後は、そのバッファーにたいして、その変数のグローバル値が効力をもちます。メジャーモードのセットにより、数少ないパーマネントローカル(permanent locals: 永久にローカル)な変数を除いて、そのバッファーのすべてのローカル変数はkillされます。
変数がカレントバッファーでローカル値をもつかに関わらず、変数にグローバル値をセットするには、Lispコンストラクトsetq-default
を使用することができます。このコンストラクトはsetq
と同じように使用されますが、(もしあれば)ローカル値のかわりにグローバル値をセットします。カレントバッファーがローカル値をもつ場合、新しいグローバル値は他のバッファーに切り替えるまで見えないでしょう。以下は例です:
(setq-default fill-column 75)
setq-default
は、make-variable-buffer-local
でマークされた変数のグローバル値をセットする唯一の方法です。
Lispプログラムは変数のデフォルト値を得るために、default-value
を使用することができます。この関数はシンボルを引数として受け取り、それのデフォルト値を返します。引数は評価されるので、通常は明示的にクォートする必要があります。たとえば、以下はfill-column
のデフォルト値を得る方法です:
(default-value 'fill-column)