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

33.19.10 テキストプロパティが区間ではない理由

バッファ内のテキストへの属性追加をサポートするエディタの中には、ユーザーにテキスト内の区間を指定させ、その区間にプロパティを追加する方式を採用しているものがあります。こうしたエディタでは、ユーザーやプログラマが個々の区間の開始位置と終了位置を決定できます。Emacs Lispでは、テキスト変更に伴う特定の矛盾した挙動を避けるため、意図的に異なる種類のインターフェースを用意しました。

区間への実際の分割に意味があるとすれば、それは、ある特性を持つ単一の区間からなるバッファと、同じテキストを2つの区間に分割して含み、かつその両方がその特性を持つバッファとを区別できるということになります。

バッファを単一のインターバルで取得し、テキストの一部をキルしたとします。バッファに残ったテキストは1つのインターバルとなり、キルリング(およびアンドゥリスト)内のコピーは別個のインターバルになります。その後、キルしたテキストをヤンクで戻すと、同じプロパティを持つ2つのインターバルが得られます。したがって、編集によって1つのインターバルと2つのインターバルの区別は保持されません。

テキスト挿入時に2つの区間を統合することで、この問題の解決を試みるとしましょう。バッファがもともと単一の区間であった場合は、これで問題なく動作します。しかし、代わりに同じ特性を持つ2つの隣接する区間があり、一方の区間のテキストを削除して元に戻したとしましょう。もう一方のケースで機能するのと同じ区間統合機能が、ここでは問題を引き起こします。元に戻した後、区間が1つしかなくなってしまうからです。ここでもまた、編集によって1つの区間と2つの区間の区別が保持されません。

区間の境界へのテキストの挿入についても、納得のいく答えのない疑問が生じる。

しかし、「このバッファまたは文字列の位置にあるテキストの特性は何か?」という形式の質問に対して、編集処理が一貫して動作するようにすることは容易です。そのため、意味をなす質問はこれらのみに限定することにし、区間の開始位置や終了位置に関する質問を行う機能は実装していません。

実際には、通常、明示的な区間境界の代わりにテキストプロパティ検索関数を使用できます。これらは、可能な限り常に区間が統合されることを前提として、区間の境界を特定するものと考えることができます。テキストプロパティ検索関数を参照してください。

Emacs は表示機能として明示的な区間も提供しています。オーバーレイを参照してください。