前: Clickable Text, 上: Text Properties
バッファ内のテキストに属性を付加できるエディタのなかには、 ユーザーにテキスト内の『範囲』を指定させ、 その範囲に属性を付加するものがあります。 このようなエディタでは、ユーザーやプログラマが 個々の範囲の先頭と末尾を決定できます。 テキスト変更に伴うある種の矛盾するようなふるまいを避けるために、 熟考の結果Emacs Lispでは別の種類のインターフェイスを提供することにしました。
複数の範囲に細分することが意味を持つならば、 ある属性の1つの範囲があるだけのバッファと、 その同じテキストをその同じ属性の2つの範囲にしてあるバッファとを 区別できるはずです。
1つの範囲だけを持つバッファにおいて、そのテキストの一部をキルしたとします。 バッファに残っているテキストは1つの範囲であり、 キルリング(とアンドゥリスト)内のコピーは1つの別の範囲になります。 そしてキルされたテキストをヤンクして戻すと、 同じ属性を持つ2つの範囲ができます。 つまり、編集すると、1つの範囲と2つの範囲の区別を保存できなくなります。
テキストを挿入すると2つの範囲を融合することで この問題を『修正』したとします。 バッファにもともと1つの範囲しかなければ、うまくいきます。 しかし、同じ属性の範囲が連続して2つある場合に、 一方の範囲をキルしてからヤンクして戻したとします。 別の場面では救いになる同じ属性の範囲を融合する機能が、 ここではトラブルを引き起こします。 つまり、ヤンクすると1つの範囲になってしまいます。 ここでも、編集すると、1つの範囲と2つの範囲の区別を保存できなくなります。
2つの範囲の境界にテキストを挿入する場合でも、 満足できる解決方法がない問題を提起します。
しかし、『この文字の属性はなにか』といった形の問いに対して 一貫したふるまいをするような編集にするのは簡単です。 そのために、これらが唯一の意味ある問いかけであると判断したのです。 範囲の先頭と末尾を問うようなものは実装してありません。
実用上は、明示的な範囲の境界のかわりに、 テキスト属性を探索する関数を普通は使えます。 それらの関数は、可能な場合にはつねに範囲は融合されると仮定して 範囲の境界を探すと考えることができます。 See Property Search。
Emacsには表示機能として明示的な範囲もあります。 Overlaysを参照してください。