Next: Finding Overlays, Previous: Managing Overlays, Up: Overlays [Contents][Index]
オーバーレイプロパティは文字が表示される方法をどちらのソースからも取得できるという点においてテキストプロパティと似ています。しかしほとんどの観点において両者は異なります。これらの比較はText Propertiesを参照してください。
テキストプロパティはそのテキストの一部として考えることができます。オーバーレイとそのプロパティは特にテキストの一部とはみなされません。したがってさまざまなバッファーや文字列の間でテキストをコピーすると、テキストプロパティは保持されますがオーバーレイを保持しようとは試みません。バッファーのテキストプロパティの変更はバッファーを変更済みとマークしますが、オーバーレイの移動やプロパティの変更は違います。テキストプロパティの変更とは異なり、オーバーレイプロパティの変更はバッファーのundoリストに記録されません。
複数のオーバーレイが同じ文字にたいしてプロパティ値を指定できるので、Emacsは各オーバーレイにたいして優先度の指定を促します。優先度の値はオーバーラップするオーバーレイのどちらが“勝つ”かを判断するために使用されます。
以下の関数はオーバーレイのプロパティの読み取りとセットを行います:
この関数はoverlay内に記録されたプロパティpropの値をリターンする。そのプロパティにたいしてoverlayが何も値を記録していないが、シンボルであるようなcategory
プロパティをもつ場合には、そのシンボルのpropプロパティが使用される。それ以外なら値はnil
。
この関数はoverlay内に記録されたプロパティpropの値にvalueをセットする。リターン値はvalue。
これはoverlayのプロパティリストのコピーをリターンする。
与えられた文字にたいしてテキストプロパティとオーバーレイプロパティの両方をチェックする関数get-char-property
も参照してください。Examining Propertiesを参照してください。
多くのオーバーレイプロパティには特別な意味があります。以下はそれらのテーブルです:
priority
このプロパティの値はオーバーレイの優先度を決定する。優先度にたいして値を指定したければnil
(か0)、または正の整数を使用すること。それ以外のすべての値にたいする動作は未定義。
2つ以上のオーバーレイが同じ文字をカバーし、いずれもが同じプロパティを指定する場合には、優先度が重要になる。他よりpriority
の値が大きいほうが他をオーバーライドする。(face
プロパティにたいしては、より高い優先度のオーバーレイの値は他の値を完全にはオーバーライドしない。かわりに高い優先度のface属性がより低い優先度のface
プロパティのface属性をオーバーライドする)。2つのオーバーレイが同じ優先値をもち、一方がもう一方にネストされている場合には、内側のオーバーレイが外側のオーバーレイより優先される。いずれのオーバーレイも他方にネストされていなければ、どちらのオーバーレイが優先するかを仮定しないこと。
現在のところ、すべてのオーバーレイはテキストプロパティより優先される。
Emacsは内部的ないくつかのオーバーレイに非数値の優先値を使用するときがあるので、(自分が作成したものでなければ)オーバーレイの優先度にたいして数値演算を試みてはならない。特にリージョンの表示に使用されるオーバーレイは(primary . secondary)
(primaryは上述のように使用されて、secondaryはprimaryとネストを考慮したオーバーレイ間の優先度の解決が失敗した際に使用される)という形式の優先値を使用する。しかしあなたにはこの実装の詳細にもとづいてLispプログラムをデザインしないようにアドバイスした。優先順にオーバーレイを配置する必要があるならoverlays-at
のsorted引数を使用すること。Finding Overlaysを参照のこと。
window
window
プロパティが非nil
ならオーバーレイはそのウィンドウだけに適用される。
category
オーバーレイがcategory
プロパティをもつなら、それをオーバーレイのカテゴリー(category)と呼ぶ。これはシンボルであること。そのシンボルのプロパティはオーバーレイのプロパティにたいしてデフォルトの役割を果たす。
face
このプロパティはテキストの外観を制御する(Facesを参照)。プロパティの値は以下のいずれか:
(keyword value
…)
という形式のプロパティリストでありkeywordはフェイス属性名、valueはその属性の値。
(foreground-color . color-name)
か(background-color
. color-name)
という形式のコンスセル。これは(:foreground
color-name)
や(:background
color-name)
と同じように、フォアグラウンドとバックグラウンドのカラーを指定する。この形式は後方互換性のためだけにサポートされており、使用は避けること。
mouse-face
このプロパティはマウスがオーバーレイ範囲内にあるときに、face
のかわりに使用される。しかしEmacsはこのプロパティに由来するテキストのサイズを変更するようなフェイス属性(:height
、:weight
、:slant
)をすべて無視する。これらの属性はハイライトされていないテキストでは常に同一である。
display
このプロパティはテキストが表示される方法を変更するさまざまな機能をアクティブにする。たとえばこれはテキストの外観を縦長(taller)や横長(shorter)にしたり、高く(higher)したり低く(lower)したり、イメージによる置き換えを行う。Display Propertyを参照のこと。
help-echo
あるオーバーレイがhelp-echo
プロパティをもつなら、そのオーバーレイ内のテキスト上にマウスを移動した際に、Emacsはエコーエリアかツールチップウィンドウにヘルプ文字列を表示する。詳細はText help-echoを参照のこと。
field
同じfield
プロパティをもつ連続する文字はフィールド(field)を形成する。forward-word
やbeginning-of-line
を含むいくつかの移動関数はフィールド境界で移動を停止する。Fieldsを参照のこと。
modification-hooks
このプロパティの値はオーバーレイ内の任意の文字の変更、またはオーバーレイの厳密に内側にテキストが挿入された場合に呼び出される関数のリスト。
このフックの関数は各変更の前後両方で呼び出される。これらの関数が受け取った情報を保存して呼び出し間で記録を比較すれば、バッファー内のテキストでどのような変更が行われたかを正確に判断できる。
変更前に呼び出された際にはオーバーレイ、nil
、変更されたテキスト範囲の開始と終了という4つの引数を各関数は受け取る。
変更後に呼び出された際にはオーバーレイ、t
、変更されたテキスト範囲の開始と終了、およびその範囲により置き換えられた変更前のテキスト長という5つの引数を各関数は受け取る(変更前の長さは挿入では0、削除では削除された文字数であり、変更後の先頭と終端が等しくなる)。
これらの関数が呼び出される際にはinhibit-modification-hooks
が、非nil
にバインドされる。関数がバッファーを変更した場合には変更にたいして変更フックが実行されるように、inhibit-modification-hooks
をnil
にバインドしたいと思うかもしれない。しかしこれを行うことにより、あなた自身の変更フックが再帰的に呼び出されるかもしれないので、それに確実に備える必要がある。Change Hooksを参照のこと。
テキストプロパティもmodification-hooks
プロパティをサポートするが詳細は幾分異なる(Special Propertiesを参照)。
insert-in-front-hooks
このプロパティの値はオーバーレイ先頭へのテキスト挿入前後に呼び出される関数のリスト。呼び出し方はmodification-hooks
の関数と同様。
insert-behind-hooks
このプロパティの値はオーバーレイ終端へのテキスト挿入前後に呼び出される関数のリスト。呼び出し方はmodification-hooks
の関数と同様。
invisible
invisible
プロパティによりオーバーレイ内のテキストを不可視にできる。これはそのテキストがスクリーン上に表示されないことを意味する。詳細はInvisible Textを下さいのこと。
intangible
オーバーレイのintangible
プロパティは正にintangible
テキストプロパティと同様に機能する。これは時代遅れである。詳細はSee Special Propertiesを参照のこと。
isearch-open-invisible
このプロパティはインクリメンタル検索にたいして最後のマッチがそのオーバーレイに重なる場合に、不可視なオーバーレイを永続的に可視にする方法を告げる。Invisible Textを参照のこと。
isearch-open-invisible-temporary
このプロパティはインクリメンタル検索にたいして、検索の間に不可視なオーバーレイを一時的に可視にする方法を告げる。Invisible Textを参照のこと。
before-string
このプロパティの値はオーバーレイ先頭に表示するために追加する文字列。この文字列はいかなる意味においてもバッファー内には出現せずにスクリーン上にのみ表れる。
after-string
このプロパティの値はオーバーレイ終端に表示するために追加する文字列。この文字列はいかなる意味においてもバッファー内には出現せずにスクリーン上にのみ表れる。
line-prefix
このプロパティは表示時にそれぞれの非継続行の後に追加するディスプレイ仕様(display spec)を指定する。Truncationを参照のこと。
wrap-prefix
このプロパティは表示時にそれぞれの継続行の前に追加するディスプレイ仕様(display spec)を指定する。Truncationを参照のこと。
evaporate
このプロパティが非nil
の場合には、そのオーバーレイが空(長さが0)になったら自動的に削除される。空のオーバーレイ(empty
overlayを参照)にたいして非nil
のevaporate
プロパティを与えた場合には即座に削除される。オーバーレイがこのプロパティをもたなければ、バッファーからオーバーレイの開始位置と終了位置の間のテキストが削除された際に削除されないことに注意。
keymap
このプロパティがnil
なら、そのテキスト範囲にたいしてキーマップを指定する。このキーマップはポイントがオーバーレイ内部(境界だ内部か否かの定義にはfront-advanceおよびrear-advanceのプロパティを考慮する)にあるとき使用されて、他のほとんどのキーマップ(Active Keymapsを参照)より優先される。
local-map
local-map
プロパティはkeymap
プロパティと同様だが、既存のキーマップに付け加えるのではなくバッファーのローカルマップを置き換える点が異なる。これはそのキーマップがマイナーモードキーマップより低い優先度をもつことも意味する。
keymap
とlocal-map
プロパティはbefore-string
、after-string
、display
プロパティにより表示された文字列には影響しません。これはポイントがその文字列上にない場合のマウスクリックや、その文字列に関する他のマウスイベントにのみ関係があります。その文字列に特別なマウスイベントをバインドするには、そのイベントをkeymap
かlocal-map
プロパティに割り当てます。Special Propertiesを参照してください。