GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Lazy-Properties.html ・ emacs-doc.conao3.com

33.19.7 テキストプロパティの遅延計算

バッファ内のすべてのテキストに対してテキストプロパティを計算する代わりに、何らかの要因で必要になった場合に、テキストの一部に対してのみプロパティを計算するように構成できます。

バッファからプロパティと共にテキストを抽出するプリミティブは 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-substring は buffer-access-fontify-functions 関数を呼び出しません。これらの文字がすでに適切なテキストプロパティを持っていると想定し、単に既存のプロパティをコピーします。

この機能の一般的な使い方は、buffer-access-fontify-functions 関数が操作対象の文字にこのプロパティやその他のプロパティを追加するというものです。これにより、同じテキストに対して繰り返し呼び出されるのを避けることができます。