Next: テキストプロパティのlazyな計算, Previous: フォーマットされたテキストのプロパティ, Up: テキストのプロパティ [Contents][Index]
ユーザーがそれらをタイプした際にはバッファーに挿入される自己挿入文字(ユーザーレベルの挿入コマンドを参照)は、通常は先行する文字と同じプロパティをもちます。これはプロパティの継承(inheritance)と呼ばれます。
対照的にLispプログラムは継承の有無に関わらず挿入を行うことができ、それは挿入プリミティブの選択に依存します。insert
のような通常のテキスト挿入関数は何もプロパティを継承しません。これらは挿入される文字列と正確に同じプロパティをもち、それ以外のプロパティはもちません。これはたとえばkillリング外部にたいしてのように、あるコンテキストから他のコンテキストにテキストをコピーするプログラムにたいして適正です。継承つきで挿入を行うためには、このセクションで説明するスペシャルプリミティブを使用します。自己挿入文字はこれらのプリミティブを使用するのでプロパティを継承します。
継承つきで挿入を行う際に、何のプロパティがどこから継承されるかはsticky(スティッキー、粘着する)に依存します。ある文字の後への挿入における、それらの文字のプロパティ継承はrear-sticky(後方スティッキー)です。ある文字の前への挿入における、それらの文字ノプロパティ継承はfront-sticky(前方スティッキー)です。これら両側のstickyが同じプロパティにたいして異なるsticky値をもつ場合には、前の文字の値が優先します。
デフォルトではテキストプロパティはfront-stickyではなくrear-stickyです。したがってデフォルトでは、すべてのプロパティは前の文字から継承して、後の文字からは何も継承しません。
さまざまなテキストプロパティのstickiness(スティッキネス、スティッキー性、粘着性、粘着度)は、2つのテキストプロパティfront-sticky
とrear-nonsticky
、および変数text-property-default-nonsticky
で制御できます。与えられたプロパティにたいして異なるデフォルトを指定するためにこの変数を使用できます。テキストの任意の特定部分に特定のstickyや非stickyプロパティを指定するために、これら2つのテキストプロパティを使用できます。
ある文字のfront-sticky
プロパティがt
なら、その文字のすべてのプロパティはfront-stickyです。front-sticky
プロパティがリストなら、その文字のstickyなプロパティは名前がそのリスト内にあるプロパティです。たとえばある文字が値が(face
read-only)
であるようなfront-sticky
プロパティをもつなら、その文字の前への挿入ではその文字のface
プロパティとread-only
プロパティは継承できますが他のプロパティは継承できません。
rear-nonsticky
は逆の方法で機能します。ほとんどのプロパティはデフォルトでrear-stickyであり、rear-nonsticky
プロパティはどのプロパティがrear-stickyではないかを告げます。ある文字のrear-nosticky
プロパティがt
なら、その文字のすべてのプロパティはrear-stickyではありません。rear-nosticky
プロパティがリストなら、その文字のstickyなプロパティは名前がそのリスト内にないプロパティです。
この変数はさまざまなテキストプロパティのデフォルトのrear-stickinessを定義するalist。各要素は(property
.
nonstickiness)
という形式をもち、これは特定のテキストプロパティpropertyのstickinessを定義する。
nonstickinessが非nil
なら、それはプロパティpropertyがデフォルトでrear-nonstickyであることを意味する。すべてのプロパティはデフォルトではfront-nonstickyなので、これによりpropertyは両方向にたいしてデフォルトでnonstickyになる。
テキストプロパティfront-sticky
とrear-nonsticky
が使用された際には、text-property-default-nonsticky
内で指定されたデフォルトのnonstickinessより優先される。
以下はプロパティ継承つきでテキストを挿入する関数です:
関数insert
と同じように文字列stringsを挿入するが、隣接するテキストからすべてのstickyなプロパティを継承する。
関数insert-before-markers
と同じように文字列stringsを挿入するが、隣接するテキストからすべてのstickyなプロパティを継承する。
継承を行わない通常の挿入関数についてはテキストの挿入を参照してください。