次: 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)