オーバーレイプロパティは文字が表示される方法をどちらのソースからも取得できるという点においてテキストプロパティと似ています。しかしほとんどの観点において両者は異なります。これらの比較はテキストのプロパティを参照してください。
テキストプロパティはそのテキストの一部として考えることができます。オーバーレイとそのプロパティは特にテキストの一部とはみなされません。したがってさまざまなバッファーや文字列の間でテキストをコピーすると、テキストプロパティは保持されますがオーバーレイを保持しようとは試みません。バッファーのテキストプロパティの変更はバッファーを変更済みとマークしますが、オーバーレイの移動やプロパティの変更は違います。テキストプロパティの変更とは異なり、オーバーレイプロパティの変更はバッファーのundoリストに記録されません。
複数のオーバーレイが同じ文字にたいしてプロパティ値を指定できるので、Emacsは各オーバーレイにたいして優先度の指定を促します。優先度の値はオーバーラップするオーバーレイのどちらが“勝つ”かを判断するために使用されます。
以下の関数はオーバーレイのプロパティの読み取りとセットを行います:
この関数はoverlay内に記録されたプロパティpropの値をリターンする。そのプロパティにたいしてoverlayが何も値を記録していないが、シンボルであるようなcategory
プロパティをもつ場合には、そのシンボルのpropプロパティが使用される。それ以外なら値はnil
。
この関数はoverlay内に記録されたプロパティpropの値にvalueをセットする。リターン値はvalue。
これはoverlayのプロパティリストのコピーをリターンする。
与えられた文字にたいしてテキストプロパティとオーバーレイプロパティの両方をチェックする関数get-char-property
も参照してください。テキストプロパティを調べるを参照してください。
多くのオーバーレイプロパティには特別な意味があります。以下はそれらのテーブルです:
priority
¶このプロパティの値はオーバーレイの優先度を決定する。優先度にたいして値を指定したければnil
(か0)、正の整数、あるいは2つの値のコンスセルを使用すること。それ以外のすべての値にたいしては未定義の動作が起こる。
2つ以上のオーバーレイが同じ文字をカバーし、それぞれが同じプロパティに違う値を指定する場合には優先度が重要になる。そのような場合には他よりpriority
の値が大きいほうが他をオーバーライドする(face
プロパティにたいしては、より高い優先度のオーバーレイの値は他の値を完全にはオーバーライドしない;
それぞれのface属性にたいしてより高い優先度のface属性が低い優先度のface
プロパティのface属性をオーバーライドする)。2つのオーバーレイが同じ優先値をもち、一方がもう一方に“ネスト”されている(カバーしているバッファーや文字列位置が小さい)場合には、内側のオーバーレイが外側のオーバーレイより優先される。いずれのオーバーレイも他方にネストされていなければ、どちらのオーバーレイが優先するかを仮定しないこと。
優先度のないオーバーレイをもつかもしれないテキストにLispプログラムが優先度を定義する際には、望ましくない結果が生じるかもしれない。なぜなら優先度のないオーバーレイは、正の優先度をもつすべてのオーバーレイにオーバーライドされてしまうからである。Emacsのほとんどの機能は優先度を指定せずにオーバーレイを使っているため、整数の優先度の使用には注意を要する。整数の優先度を使用することによって他のオーバーレイをオーバーライドしてしまう危険を冒すかわりに、(primary . secondary)
という形式の値を優先度にすることができる。ここでprimaryは上述のように使用されるが、primaryにたいするネスト状況の検討においてそれぞれのオーバーレイの間の優先度の解決に失敗した際に用いられるフォールバック値がsecondaryである。特に優先度の値として(nil . n)
のnに正の整数を指定すると、他のオーバーレイを完全にオーバーライドせずに、必要に応じてオーバーレイを優先度順に並べることができる。
現在のところ、すべてのオーバーレイはテキストプロパティより優先される。
優先度順にオーバーレイを配置する必要がある場合には、overlays-at
のsorted引数を用いることができる。See オーバーレイにたいする検索を参照のこと。
window
¶window
プロパティが非nil
ならオーバーレイはそのウィンドウだけに適用される。
category
¶オーバーレイがcategory
プロパティをもつなら、それをオーバーレイのカテゴリー(category)と呼ぶ。これはシンボルであること。そのシンボルのプロパティはオーバーレイのプロパティにたいしてデフォルトの役割を果たす。
face
¶このプロパティはテキストの外観を制御する(フェイスを参照)。プロパティの値は以下のいずれか:
(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
プロパティを参照のこと。
help-echo
¶あるオーバーレイがhelp-echo
プロパティをもつなら、そのオーバーレイ内のテキスト上にマウスを移動した際に、Emacsはエコーエリアかツールチップにヘルプ文字列を表示する。詳細はText help-echoを参照のこと。
field
¶同じfield
プロパティをもつ連続する文字はフィールド(field)を形成する。forward-word
やbeginning-of-line
を含むいくつかの移動関数はフィールド境界で移動を停止する。フィールドの定義と使用を参照のこと。
modification-hooks
¶このプロパティの値はオーバーレイ内の任意の文字の変更、またはオーバーレイの厳密に内側にテキストが挿入された場合に呼び出される関数のリスト。
このフックの関数は各変更の前後両方で呼び出される。これらの関数が受け取った情報を保存して呼び出し間で記録を比較すれば、バッファー内のテキストでどのような変更が行われたかを正確に判断できる。
変更前に呼び出された際にはオーバーレイ、nil
、変更されたテキスト範囲の開始と終了という4つの引数を各関数は受け取る。
変更後に呼び出された際にはオーバーレイ、t
、変更されたテキスト範囲の開始と終了、およびその範囲により置き換えられた変更前のテキスト長という5つの引数を各関数は受け取る(変更前の長さは挿入では0、削除では削除された文字数であり、変更後の先頭と終端が等しくなる)。
これらの関数が呼び出される際にはinhibit-modification-hooks
が、非nil
にバインドされる。関数がバッファーを変更した場合には変更にたいして変更フックが実行されるように、inhibit-modification-hooks
をnil
にバインドしたいと思うかもしれない。しかしこれを行うことにより、あなた自身の変更フックが再帰的に呼び出されるかもしれないので、それに確実に備える必要がある。フックの変更を参照のこと。
テキストプロパティもmodification-hooks
プロパティをサポートするが詳細は幾分異なる(特殊な意味をもつプロパティを参照)。
insert-in-front-hooks
¶このプロパティの値はオーバーレイ先頭へのテキスト挿入前後に呼び出される関数のリスト。呼び出し方はmodification-hooks
の関数と同様。
insert-behind-hooks
¶このプロパティの値はオーバーレイ終端へのテキスト挿入前後に呼び出される関数のリスト。呼び出し方はmodification-hooks
の関数と同様。
invisible
¶invisible
プロパティによりオーバーレイ内のテキストを不可視にできる。これはそのテキストがスクリーン上に表示されないことを意味する。詳細は不可視のテキストを下さいのこと。
intangible
¶オーバーレイのintangible
プロパティは正にintangible
テキストプロパティと同様に機能する。これは時代遅れである。詳細はSee 特殊な意味をもつプロパティを参照のこと。
isearch-open-invisible
このプロパティはインクリメンタル検索(Incremental Search in The GNU Emacs Manualを参照)にたいして最後のマッチがそのオーバーレイに重なる場合に、不可視なオーバーレイを永続的に可視にする方法を告げる。不可視のテキストを参照のこと。
isearch-open-invisible-temporary
このプロパティはインクリメンタル検索にたいして、検索の間に不可視なオーバーレイを一時的に可視にする方法を告げる。不可視のテキストを参照のこと。
before-string
¶このプロパティの値はオーバーレイ先頭に表示するために追加する文字列。この文字列はいかなる意味においてもバッファー内には出現せずにスクリーン上にのみ表れる。オーバーレイ先頭のテキストが不可視になると、その文字列は表示されなくなることに注意。
after-string
¶このプロパティの値はオーバーレイ終端に表示するために追加する文字列。この文字列はいかなる意味においてもバッファー内には出現せずにスクリーン上にのみ表れる。オーバーレイ終端のテキストが不可視になると、その文字列は表示されなくなることに注意。
line-prefix
このプロパティは表示時にそれぞれの非継続行の後に追加するディスプレイ仕様(display spec)を指定する。切り詰めを参照のこと。
wrap-prefix
このプロパティは表示時にそれぞれの継続行の前に追加するディスプレイ仕様(display spec)を指定する。切り詰めを参照のこと。
evaporate
¶このプロパティが非nil
の場合には、そのオーバーレイが空(長さが0)になったら自動的に削除される。空のオーバーレイ(empty
overlayを参照)にたいして非nil
のevaporate
プロパティを与えた場合には即座に削除される。オーバーレイがこのプロパティをもたなければ、バッファーからオーバーレイの開始位置と終了位置の間のテキストが削除された際に削除されないことに注意。
display-line-numbers-disable
¶This property prevents display of line numbers (see display-line-numbers in The GNU Emacs Manual) for the text which is within an overlay having this property. One situation where using an overlay with this property is useful is an empty overlay at end-of-buffer, since otherwise there’s no way of preventing the display of the line number there.
keymap
¶このプロパティがnil
なら、そのテキスト範囲にたいしてキーマップを指定する。このキーマップはポイントがオーバーレイ内部(境界だ内部か否かの定義にはfront-advanceおよびrear-advanceのプロパティを考慮する)にあるとき使用されて、他のほとんどのキーマップ(アクティブなキーマップを参照)より優先される。
local-map
¶local-map
プロパティはkeymap
プロパティと同様だが、既存のキーマップに付け加えるのではなくバッファーのローカルマップを置き換える点が異なる。これはそのキーマップがマイナーモードキーマップより低い優先度をもつことも意味する。
keymap
とlocal-map
プロパティはbefore-string
、after-string
、display
プロパティにより表示された文字列には影響しません。これはポイントがその文字列上にない場合のマウスクリックや、その文字列に関する他のマウスイベントにのみ関係があります。その文字列に特別なマウスイベントをバインドするには、そのイベントをkeymap
かlocal-map
プロパティに割り当てます。特殊な意味をもつプロパティを参照してください。