どんな変数もEmacsの特定のバッファにローカルにすることができます.つま りその変数のあるバッファでの値は,他のバッファでの値と独立にできます.す べてのバッファでいつもローカルであるような変数もいくつかあります.それ以 外のすべてのEmacs変数は,ローカルでないすべてのバッファで有効になる グローバル値を持ちます.
主モードは,バッファに対してローカルな変数を作ります.よって1つのバッ ファで主モードを変えても,他のバッファに影響はありません.
M-x make-local-variableは変数の名を読みとってそれをカレントバッ ファに対してローカルにします.このバッファでさらに変更しても他のバッファ には影響しませんし,またグローバル値が変わってもこのバッファには影響しま せん.
M-x make-variable-buffer-localは変数名を読みとって,その変数に値
が設定されたときに自動的にローカルになるような性質を変数に与えます.正確
には,このような性質を持った変数を通常の方法で変数に値を設定すると,はじ
めに自動的にmake-local-variable
が行なわれます.このような変数を
バッファ固有の変数といいます.
いくつかの重要な変数は,はじめからバッファに固有な変数になっています.
それは,abbrev-mode
,auto-fill-hook
,
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
です.他の変数はすべてのバッファ
で常にローカルです.ただしそれは内部的に使用しているものです.
M-x kill-local-variableは,変数の名を読みとってそれをカレントバッ ファのローカルではないようにします.以降はその変数のグローバル値がこのバッ ファでも使われます.主モードを設定すると,そのバッファでローカルだった変 数は,すべてグローバルに変えられます.
変数がカレントバッファにローカルな値を持っているかに関わらず,変数にグ
ローバルな値を設定するにはLisp関数setq-default
を使います.これは
setq
と同じように動作します.もしカレントバッファにローカルな値が
設定されていると,ローカルな値はsetq-default
では変更されません.
よって,新しく設定したグローバル値は他のバッファに切替えるまで効果を持ち
ません.たとえば次のように使います.
(setq-default fill-column 75)
make-variable-buffer-local
でバッファ固有にした変数のグローバル値
を変えられるのはsetq-default
だけです.
プログラム内ではdefault-value
を使って変数のデフォルト値の参照が
できます.この関数はシンボルを引数として,そのデフォルト値を返します.引
数は評価されるので普通は陽にクォートをつけてください.たとえば次のように
使います.
(default-value 'fill-column)