次: File Variables, 前: Hooks, 上: Variables
ほとんどの変数はEmacsバッファに対してローカルにできます。 つまり、その変数のバッファ中での値は他のバッファでの値とは 独立になります。 いくつかの変数はつねにすべてのバッファにおいてローカルです。 それ以外の変数はすべて、グローバルな値、 つまりその変数をローカルにしていないすべてのバッファにおいて 共有される値を持ちます。
M-x make-local-variableは変数名を受け取り、 その変数をカレントバッファにおいてローカルにします。 それ以降、このバッファ内でその変数を変更しても 他のバッファには影響しませんし、 その変数のグローバルな値を変更してもこのバッファ内での値には影響しません。
M-x make-variable-buffer-localは、変数名を受け取り、
値が設定されるとその変数が自動的にローカルになるようにします。
もっと正確にいえば、このように特別な印を変数に付けておくと、
通常の方法で変数に値を設定するときにはつねにまず
make-local-variableが実行されるようになるのです。
このような変数をバッファごとの変数と呼びます。
メジャーモード(see Major Modes)では、
変数を設定するまえにつねにローカルにします。
このため、あるバッファでメジャーモードを変更しても
他のバッファには影響が及びません。
マイナモード(see Minor Modes)も同様で、通常、
マイナモードごとにオン/オフを制御する変数があり、
その変数がnil以外のときにそのマイナモードはオンになります。
ほとんどのマイナモードでは、その制御用変数はバッファごとの変数です。
Emacsには、つねにバッファごとの変数であるような変数が数多くあります。
abbrev-mode、auto-fill-function、case-fold-search、
comment-column、ctl-arrow、fill-column、
fill-prefix、indent-tabs-mode、left-margin、
mode-line-format、overwrite-mode、
selective-display-ellipses、selective-display、
tab-width、truncate-linesがそのような変数です。
これ以外にもつねに各バッファでローカルな変数はありますが、
それらは内部作業用の変数です。
いくつかの変数はディスプレイに対してローカルになっているため、 バッファに対してローカルにはできません (see Multiple Displays)。 これらの変数をバッファにローカルにしようとすると、 エラーメッセージが表示されます。
M-x kill-local-variableは、変数名を受け取り、 その変数をカレントバッファに対してローカルでなくします。 それ以降そのバッファでは、その変数のグローバルな値が使われます。 メジャーモードを設定すると、つねにローカルと印が付いた少数の特別な 変数を除いて、そのバッファにローカルなすべての変数をローカルでなくします。
ある変数がカレントバッファでローカルか否かに係わらず
その変数のグローバルな値を設定したければ、setq-defaultを使います。
これはsetqのように使われますが、
(たとえローカルな値があったとしても)つねにグローバルな値のほうを設定します。
その変数がローカルな値を持っている場合、
新たに設定したグローバルな値は別のバッファに切り替えるまでは参照できません。
以下に例をあげます。
(setq-default fill-column 75)
setq-defaultは、
make-variable-buffer-localで印を付けた変数の
グローバルな値を設定する唯一の方法です。
Lispプログラム中では、変数のデフォルト値を参照するためには
default-valueを使えます。
この関数はシンボルを引数とし、その変数のデフォルト値を返します。
引数は評価されるので、普通は引数をクォートします。
たとえば、fill-columnのデフォルト値を取得するにはつぎのようにします。
(default-value 'fill-column)