次: , 前: Saving Properties, 上: Text Properties


31.19.8 テキスト属性の遅延計算

バッファ内のすべてのテキストのテキスト属性を計算するかわりに、 必要になった時点でテキストの一部分のテキスト属性を計算するようにできます。

バッファからテキスト属性とともにテキストを取り出す基本関数は、 buffer-substringです。 属性を調べるまえに、この関数はアブノーマルフック buffer-access-fontify-functionsを実行します。

— 変数: buffer-access-fontify-functions

この変数は、テキスト属性を計算する関数のリストを保持する。 buffer-substringがバッファの一部分からテキストとテキスト属性を コピーするまえに、この関数はこのリスト内の関数すべてを呼び出す。 各関数は、バッファの参照される範囲を指定する2つの引数を受け取る。 (バッファはつねにカレントバッファである。)

関数buffer-substring-no-propertiesは テキスト属性を無視するので、これらの関数を呼び出しません。

バッファの同じ部分に対してフック関数が複数回呼び出されるのを防ぐには、 変数buffer-access-fontified-propertyを使います。

— 変数: buffer-access-fontified-property

この変数の値がnil以外であると、 それはテキスト属性の名前として使われるシンボルである。 そのテキスト属性に対するnil以外の値は、 『この文字の他のテキスト属性はすでに計算済みである』ことを意味する。

buffer-substringに指定された範囲のすべての文字において、 この属性に対してnil以外の値があると、 buffer-substringbuffer-access-fontify-functionsの関数を呼び出さない。 それらの文字にはすでに正しいテキスト属性があるとみなし、 それらにすでにある属性をコピーする。

この機能を使う普通の方法は、 buffer-access-fontify-functionsの関数が 他の属性ととともにこの属性をそれらが操作した文字に追加する。 そうすれば、同じテキストに対して何回も呼び出されるのを防ぐことができる。