Next: Default Value, Previous: Intro to Buffer-Local, Up: Buffer-Local Variables [Contents][Index]
この関数はカレントバッファー内で、variable(シンボル)にたいして、バッファーローカルなバインディングを作成します。他のバッファーは影響を受けません。returnされる値は、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
はバインディングを作成される変数だけを知るからです。
変数が端末ローカル(Multiple Terminalsを参照してください)の場合、この関数はエラーをシグナルします。そのような変数は、バッファーローカルなバインディングをもつことができません。
警告:
フック変数にたいしてmake-local-variable
を使用しないでください。フック変数は、add-hook
またはremove-hook
のlocal引数を使用した場合、必要に応じて自動的にバッファーローカルになります。
このマクロはカレントバッファー内でvariableにたいしてバッファーローカルなバインディングを作成して、それにバッファーローカルな値valueを与えます。このマクロはmake-local-variable
に続けてsetq
を呼び出すのと同じです。variableはクォートされていないシンボルです。
このコマンドは、variable(シンボル)が自動的にバッファーローカルになるようにマークするので、それ以降にその変数へのセットを試みると、その時点でカレントのバッファーにローカルになります。しばしば混乱を招くmake-local-variable
とは異なり、これが取り消されることはなく、すべてのバッファー内での変数の挙動に影響します。
この機能に特有の欠点は、(let
またはその他のバインディング構造による)変数のバインディングが、その変数にたいするバッファーローカルなバインディングを作成しないことです。(set
またはsetq
による)変数のセットだけは、その変数がカレントバッファーで作成されたlet
スタイルのバインディングをもたないので、ローカルなバインディングを作成します。
variableがデフォルト値をもたない場合、このコマンドの呼び出しはnil
のデフォルト値を与えます。variableがすでにデフォルト値をもつ場合、その値は変更されずに残ります。それ以降にvariableにたいしてmakunbound
を呼び出すと、バッファーローカル値をvoidにして、デフォルト値は影響を受けずに残ります。
return値はvariableです。
警告:
ユーザーオプション変数にたいしては、ユーザーは異なるバッファーにたいして異なるカスタマイズを望むかもしれないので、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
をreturnします。
これはvariableがバッファーbuffer内でバッファーローカル値をもつか、自動的にバッファーローカルになる場合は、t
をreturnします。それ以外はnil
をreturnします。bufferが省略またはnil
の場合のデフォルトは、カレントバッファーです。
この関数は、バッファーbuffer内の、variable(シンボル)のバッファーローカルなバインディングをreturnします。variableがバッファーbuffer内でバッファーローカルなバインディングをもたない場合は、かわりにvariableのデフォルト値(Default Value)をreturnします。
この関数はバッファーbuffer内のバッファーローカル変数を表すリストをreturnします(bufferが省略された場合はカレントバッファーが使用されます)。リストの各要素は通常、(sym . val)
という形式をもちます。ここでsymはバッファーローカル変数(シンボル)、valはバッファーローカル値です。しかしbuffer内の、ある変数のバッファーローカルなバインディングがvoidのtきは、その変数に対応するリスト要素は単に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)を除き、カレントバッファーのすべてのバッファーローカルなバインディングを解消します。結果として、そのバッファーはほとんどの変数のデフォルト値を参照するようになります。
この関数は、そのバッファーに関係のあるその他の特定の情報もリセットします。これはローカルキーマップ(local
keymap)をnil
、構文テーブル(syntax
table)を(standard-syntax-table)
の値、大文字小文字テーブル(case
table)を(standard-case-table)
、abbrevテーブル(abbrev
table)を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なローカル変数は、ファイルの内容を編集する方法などより、どこから読み込んだファイルか、あるいはどのように保存するかといったことに関連するデータに適しています。