Emacs に固有の問題として、 (ある変数に対し)バッファごとに異なる値を持たせるこ とがしばしば(非常に)有効であるということがあります。これは、変数をバッファロー カル(な変数である) と宣言することで行なわれます。この宣言を行なうと、変数は、 別のバッファがカレントな時にその変数に対して何を行なっても影響を受けない、カレ ントバッファでの値を持つことができます。
バッファローカルな変数には 2種類のものが存在します。 make-local-variable は変 数をカレントなバッファでローカルなものとし、 make-variable-buffer-local は変数 を (後で新規に作るバッファをも含め) 全てのバッファでローカルなものとします。 buffer-local 変数と区別する必要のある場合、後者を per-buffer-local 変数と呼び ます。(ターミノロジー!!) per-buffer-local 変数は各バッファでバッファローカルで す。
カレントなバッファでバッファローカルな変数を set や setq (ほかに?? set- variable let defun) で変更しても、他のバッファで見える値は変化しません。
(1つの変数に対し両方用いられたらどうなる?? バッファローカルになった前や後にそ の変数がローカルにバインドされたらどうなる??)
バッファローカルな変数のデフォルト値は、 (make-local-variable の場合) その変数 をバッファローカルにしていないバッファで見える値で、 (make-variable-buffer-local の場合) まだ値の設定を行なってない時の値です。デフ ォルト値は set-defaultか serq-default で変更することができます。
(バッファローカルな変数の実際のインプリメンテーションは、別のバッファが選択さ れるたびに、ローカル値をグローバルセルの値で置き換える shallow binding 方式で あることもあります。これはバッファのスイッチングをよりコストのかかるものにしま すが、変数の評価はそれほどでもありません)(訳注:??)
Function: buffer-local-variables &optional buffer
この関数は、バッファローカルな変数とその値とからなる pair をリストの各要素 として持つ association リストを作ります。 buffer が与えられない場合、カレ ントバッファを用います。このリスト中の値を変更しても(その)変数のローカル値 を変えることにはならない点に注意して下さい。
(setq lcl (buffer-local-variables)) => ((fill-column . 75)
(case-fold-search . t) ... (mark-ring #<marker at 5454 in buffes.texinfo>) (require-final-newline . t))
Command: make-local-variables symbol
この関数は、カレントバッファにおいて symbol が(別の)値を持つようにします。 この変数のカレント値は、この変数を(まだ) バッファローカルにしていない (他 の)バッファでのデフォルト値として残されます。
インタラクティブに呼ばれた場合、 symbol を求め(ミニバッファに)プロンプトを 出します。
Command: make-variable-buffer-local symbol
この関数は、 symbol を(新規に作るバッファをも含め) 全てのバッファにおいて バッファローカルな変数にします。 make-variable-buffer-local を呼ぶと、 symbol のカレント値は(それ自身の)バッファローカル値を持たないバッファで見 られるデフォルト値になります。この変数の値を変えると、(前はデフォルトの値 であっても) カレントバッファにおける(別の)値を持つことになります。
symbol を返します。
;;バッファ A で (setq foo 5) => 5 (make-variable-buffer-local 'foo) => foo foo => 5 (setq foo 6) => 6
;;バッファ B で、値は変更されなかった。
foo => 5 ;;ここで、デフォルト値(A での値ではない)を変える (setq-default foo 9) => 9 foo => 9
Function: kill-all-local-variables
この関数は、カレントバッファのバッファローカルな変数の値を(全て)削除しま す。 (この後) このバッファでは、その全ての変数のデフォルト値が見えることに なります。これはその変数が "バッファローカルである" という状態(訳注: status) を変えることはしません。
Command: kill-local-variable symbol
この関数は、カレントバッファで symbol が(別の)値を持つことがないようにしま す。 (以後)このバッファではデフォルト値を用います。
インタラクティブに呼ばれた場合、 symbol を求め(ミニバッファに)プロンプトを 出します。
Special Form: setq-default [symbol value]*
この関数は、各 symbol のデフォルト値を、(それに対応する) value に設定しま す。(symbol は評価しませんが) value は評価します。最初の value を返しま す。
デフォルト値は、 (固有の)バッファローカル値を持たないバッファで見られま す。
カレントバッファで symbol がバッファローカルでない場合、これは (この)カレ ントバッファで setq を行なうのと同じことになります。 symbol がカレントバッ ファでバッファローカルである場合、カレントバッファで見える値ではなく、他の
バッファがまだバッファローカルな値を持たない場合にそこで見える値を設定しま す。
(make-variable-buffer-local 'local) => local
;; バッファ foo 中: (setq local 'foo) => foo
;; バッファ bar 中: local => nil (setq-default local 'default) => default local => default (setq local 'bar) => bar
;; バッファ baz 中: local => default
;; バッファ foo 中: (setq local 'foo) => foo (default-value 'local) => default
Function: set-default symbol value
この関数は、ただ 1つの symbol と 1 つの value のみを許す点と、その両方を評 価する点とを除き setq-default と同じです (setq-default 参照)。
(setq-default (car '(a b c)) 23) => 23
Function: default-value symbol
symbol のデフォルト値を返します。この値は、 (その変数に対しバッファとして の値を持たない)バッファで見える値です(セクション 9.5 [setq-default]、ペー ジ 81 参照)。 symbol がバッファローカルでない場合、symbol-value と同じにな ります。
Function: hack-local-variables &optional force
SourceFile files.el カレントバッファのローカル変数をパーズし、バインドする か適切なものとして評価します(訳注:??)。ファイルの hack-local-variables セ クションに関しては、チャプター 22 [Files]、ページ 199 を参照して下さい。