Next: Default Value, Previous: Intro to Buffer-Local, Up: Buffer-Local Variables [Contents][Index]
この関数はカレントバッファー内で、variable(シンボル)にたいするバッファーローカルなバインディングを作成する。他のバッファーは影響を受けない。リターンされる値はvariable。
variableのバッファーローカルな値は、最初は以前にvariableがもっていた値と同じ値をもつ。variableがvoidのときはvoidのまま。
;; バッファー‘b1’で行う: (setq foo 5) ; すべてのバッファーに影響する。 ⇒ 5
(make-local-variable 'foo) ; ‘b1’内でローカルになった
⇒ foo
foo ; 値は変更されない
⇒ 5
(setq foo 6) ; ‘b1’内で値を変更
⇒ 6
foo ⇒ 6
;; バッファー‘b2’では、値は変更されていない
(with-current-buffer "b2"
foo)
⇒ 5
変数をlet
バインディングでバッファーローカルにしても、let
への出入り時の両方でこれを行うバッファーがカレントでなければ信頼性はない。これはlet
がバインディングの種類を区別しないからである。let
に解るのはバインディングが作成される変数だけである。
定数や読み取り専用の変数をバッファーローカルにするとエラーになる。Constant Variablesを参照のこと。
変数が端末ローカル(Multiple Terminalsを参照)なら、この関数はエラーをシグナルする。そのような変数はバッファーローカルなバインディングをもつことができない。
警告:
フック変数にたいしてmake-local-variable
を使用しないこと。フック変数はadd-hook
かremove-hook
のlocal引数を使用すると、必要に応じて自動でバッファーローカルになる。
pairsは変数と値のペアからなるリスト。このマクロはカレントバッファー内で変数それぞれにたいしてバッファーローカルなバインディングを作成して、それにバッファーローカルな値を与える。このマクロは各変数にたいしてmake-local-variable
の後にsetq
を呼び出すのと等価。変数はクォートされていないシンボルであること。
(setq-local var1 "value1" var2 "value2")
このコマンドはvariable(シンボル)が自動的にバッファーローカルになるようにマークするので、それ以降にその変数へのセットを試みると、その時点でカレントのバッファーにローカルになる。しばしば混乱を招くmake-local-variable
とは異なり、これが取り消されることはなく、すべてのバッファー内での変数の挙動に影響する。
この機能特有の欠点は、(let
やその他のバインディング構文による)変数のバインディングが、その変数にたいするバッファーローカルなバインディングを作成しないことである。(set
やsetq
による)変数のセットだけは、その変数がカレントバッファーで作成されたlet
スタイルのバインディングをもたないので、ローカルなバインディングを作成する。
variableがデフォルト値をもたない場合、このコマンドの呼び出しはnil
のデフォルト値を与える。variableがすでにデフォルト値をもつなら、その値は変更されずに残る。それ以降にvariableにたいしてmakunbound
を呼び出すと、バッファーローカル値をvoidにして、デフォルト値は影響を受けずに残る。
▼リターン値はvariable。
定数や読み取り専用の変数をバッファーローカルにするとエラーになる。Constant Variablesを参照のこと。
警告:
ユーザーオプション変数では、ユーザーは異なるバッファーにたいして異なるカスタマイズを望むかもしれないので、make-variable-buffer-local
を使うべきだと決め込むべきではない。ユーザーは望むなら任意の変数をローカルにできる。その選択の余地を残すほうがよい。
make-variable-buffer-local
を使用すべきなのは、複数のバッファーが同じバインディングを共有しないことが自明な場合である。たとえばバッファーごとに個別な値をもつことに依存するLispプログラム内の内部プロセスにたいして変数が使用されるときは、make-variable-buffer-local
の使用が最善の解決策になるかもしれない。
このマクロはvariableを初期値valueとdocstringの変数として定義して、それを自動的にバッファーローカルとマークする。これはdefvar
の後につづけてmake-variable-buffer-local
を呼び出すのと同じ。variableはクォートされていないシンボル。
これはvariableがバッファーbuffer(デフォルトはカレントバッファー)内でバッファーローカルならt
、それ以外はnil
をリターンする。
これはvariableがバッファーbuffer内でバッファーローカル値をもつ、または自動的にバッファーローカルになるならt
、それ以外はnil
をリターンする。bufferが省略またはnil
の場合のデフォルトはカレントバッファー。
この関数はバッファーbuffer内の、variable(シンボル)のバッファーローカルなバインディングをリターンする。variableがバッファーbuffer内でバッファーローカルなバインディングをもたなければ、かわりにvariableのデフォルト値(Default Valueを参照)をリターンする。
この関数はバッファーbuffer内のバッファーローカル変数を表すリストをリターンする(bufferが省略された場合はカレントバッファーが使用される)。リストの各要素は通常は(sym . val)
という形式をもつ。ここでsymはバッファーローカル変数(シンボル)、valはバッファーローカル値。しかしbuffer内のある変数のバッファーローカルなバインディングがvoidなら、その変数に対応するリスト要素は単にsymとなる。
(make-local-variable 'foobar) (makunbound 'foobar) (make-local-variable 'bind-me) (setq bind-me 69)
(setq lcl (buffer-local-variables))
;; 最初はすべてのバッファー内でローカルなビルトイン変数:
⇒ ((mark-active . nil)
(buffer-undo-list . nil)
(mode-name . "Fundamental")
…
;; 次にビルトインでないバッファーローカル変数 ;; This one is buffer-local and void: foobar ;; これはバッファーローカルでvoidではない: (bind-me . 69))
このリスト内のコンスセルのCDRに新たな値を格納しても、その変数のバッファーローカル値は変化しないことに注意。
この関数はカレントバッファー内のvariable(シンボル)にたいするバッファーローカルなバインディング(もしあれば)を削除する。その結果として、このバッファー内でvariableのデフォルトバインディングが可視になる。これは通常はvariableの値を変更する。デフォルト値は削除されたバッファーローカル値とは異なるのが普通だからである。
セットしたとき自動的にバッファーローカルになる変数のバッファーローカルなバインディングをkillすると、これによりカレントバッファー内でデフォルト値が可視になる。しかし変数を再度セットすると、その変数にたいするバッファーローカルなバインディングが再作成される。
kill-local-variable
はvariableをreturnします。
この関数はコマンドである。なぜならバッファーローカル変数のインタラクティブな作成が有用な場合があるように、あるバッファーローカル変数のインタラクティブなkillが有用な場合があるからである。
この関数はpermanent(永続的)とマークされた変数とpermanent-local-hook
プロパティーに非nil
をもつローカルフック関数(Setting Hooksを参照)を除き、カレントバッファーのすべてのバッファーローカルなバインディングを解消する。結果として、そのバッファーのほとんどの変数がデフォルト値を参照するようになる。
この関数はそのバッファーに関連する他の特定の情報もリセットする。これはローカルキーマップをnil
、構文テーブルを(standard-syntax-table)
の値、caseテーブルを(standard-case-table)
、abbrevテーブルをfundamental-mode-abbrev-table
の値にセットする。
この関数が1番最初に行うのはノーマルフックchange-major-mode-hook
(以下参照)の実行である。
すべてのメジャーモードコマンドは、Fundamentalモードにスイッチする効果をもち、以前のメジャーモードのほとんどの効果を消去する、この関数を呼び出すことによって開始されます。この関数が処理を行うのを確実にするために、メジャーモードがセットする変数はpermanentとマークすべきではない。
kill-all-local-variables
returns nil
.
関数kill-all-local-variables
は、何か他のことを行う前にまずこのノーマルフックを実行する。この関数はメジャーモードにたいして、ユーザーが他のメジャーモードにスイッチした場合に行われる何か特別なことを準備する方法を与える。この関数はユーザーがメジャーモードを変更した場合に忘れられるべき、バッファー固有のマイナーモードにたいしても有用。
最善の結果を得るために、この変数をバッファーローカルにすれば、処理が終了したときに消えるので、以降のメジャーモードに干渉しなくなる。Hooksを参照のこと。
変数名(シンボル)が非nil
のpermanent-local
プロパティーをもつなら、そのバッファーローカル変数はpermanent(永続的)です。そのような変数はkill-all-local-variables
の影響を受けず、したがってメジャーモードの変更によりそれらのローカルバインディングは作成されません。permanentなローカル変数はファイルの内容を編集する方法ではなく、どこから読み込んだファイルか、あるいはどのように保存するかといったことに関連するデータに適しています。