Next: , Previous: , Up: Overlays   [Contents][Index]


37.9.2 オーバーレイのプロパティ

オーバーレイプロパティは文字が表示される方法をどちらのソースからも取得できるという点においてテキストプロパティと似ています。しかしほとんどの観点において両者は異なります。これらの比較はText Propertiesを参照してください。

テキストプロパティはそのテキストの一部として考えることができます。オーバーレイとそのプロパティは特にテキストの一部とはみなされません。したがってさまざまなバッファーや文字列の間でテキストをコピーすると、テキストプロパティは保持されますがオーバーレイを保持しようとは試みません。バッファーのテキストプロパティの変更はバッファーを変更済みとマークしますが、オーバーレイの移動やプロパティの変更は違います。テキストプロパティの変更とは異なり、オーバーレイプロパティの変更はバッファーのundoリストに記録されません。

複数のオーバーレイが同じ文字にたいしてプロパティ値を指定できるので、Emacsは各オーバーレイにたいして優先度の指定を許容します。2つのオーバーレイが同じ値の優先度をもち、一方が他方にネストされている場合には、内側のオーバーレイが外側のオーバーレイより高い優先度をもちます。いずれのオーバーレイも他方をネストしない場合には、どちらのオーバーレイが優先されるかについて予測するべきではありません。

以下の関数はオーバーレイのプロパティの読み取りとセットを行います:

Function: overlay-get overlay prop

この関数はoverlay内に記録されたプロパティpropの値をリターンする。そのプロパティにたいしてoverlayが何も値を記録していないが、シンボルであるようなcategoryプロパティをもつ場合には、そのシンボルのpropプロパティが使用される。それ以外なら値はnil

Function: overlay-put overlay prop value

この関数はoverlay内に記録されたプロパティpropの値にvalueをセットする。リターン値はvalue

Function: overlay-properties overlay

これはoverlayのプロパティリストのコピーをリターンする。

与えられた文字にたいしてテキストプロパティとオーバーレイプロパティの両方をチェックする関数get-char-propertyも参照してください。Examining Propertiesを参照してください。

多くのオーバーレイプロパティには特別な意味があります。以下はそれらのテーブルです:

priority

このプロパティの値はオーバーレイの優先度を決定する。優先度にたいして値を指定したければnil (か0)、または正の整数を使用すること。それ以外のすべての値にたいする動作は未定義。

2つ以上のオーバーレイが同じ文字をカバーして、いずれもが同じプロパティを指定する場合には優先度が重要になる。他よりpriorityの値が大きいほうが他をオーバーライドする。faceプロパティにたいしては、より高い優先度のオーバーレイの値は他の値を完全にはオーバーライドしない。かわりにより低い優先度のfaceプロパティのface属性を高い優先度のface属性がオーバーライドする。

現在のところ、すべてのオーバーレイはテキストプロパティより優先される。

Emacsは内部的なオーバーレイのいくつかにたいして非数値の優先度を使用することがあるので、(自分が作成したオーバーレイでなければ)オーバーレイ優先度の算術演算を試みないように注意すること。オーバーレイを優先度順に配置する必要があるなら、overlays-atsorted引数を使用すること。Finding Overlaysを参照のこと。

window

windowプロパティが非nilならオーバーレイはそのウィンドウだけに適用される。

category

オーバーレイがcategoryプロパティをもつなら、それをオーバーレイのカテゴリー(category)と呼ぶ。これはシンボルであること。そのシンボルのプロパティはオーバーレイのプロパティにたいしてデフォルトの役割を果たす。

face

このプロパティはテキストの外観を制御する(Facesを参照)。プロパティの値は以下のいずれか:

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-wordbeginning-of-lineを含むいくつかの移動関数はフィールド境界で移動を停止する。Fieldsを参照のこと。

modification-hooks

このプロパティの値はオーバーレイ内の任意の文字の変更、またはオーバーレイの厳密に内側にテキストが挿入された場合に呼び出される関数のリスト。

このフックの関数は各変更の前後両方で呼び出される。これらの関数が受け取った情報を保存して呼び出し間で記録を比較すれば、バッファー内のテキストでどのような変更が行われたかを正確に判断できる。

変更前に呼び出された際にはオーバーレイ、nil、変更されたテキスト範囲の開始と終了という4つの引数を各関数は受け取る。

変更後に呼び出された際にはオーバーレイ、t、変更されたテキスト範囲の開始と終了、およびその範囲により置き換えられた変更前のテキスト長という5つの引数を各関数は受け取る(変更前の長さは挿入では0、削除では削除された文字数であり、変更後の先頭と終端が等しくなる)。

これらの関数がバッファーを変更する場合には、これらのフックを呼び出す内部的メカニズムの混乱を避けるために、それを行う前後でinhibit-modification-hookstにバインドすること。

テキストプロパティも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)になったら、自動的に削除される。空のオーバーレイにたいして非nilevaporateプロパティを与えた場合は、即座に削除される。

keymap

このプロパティがnilなら、そのテキスト範囲にたいしてキーマップを指定する。このキーマップはポイントの後の文字がそのオーバーレイ内にあるときに使用されて、他のほとんどのキーマップより優先される。Active Keymapsを参照のこと。

local-map

local-mapプロパティはkeymapプロパティと同様だが、既存のキーマップに付け加えるのではなくバッファーのローカルマップを置き換える点が異なる。これはそのキーマップがマイナーモードキーマップより低い優先度をもつことも意味する。

keymaplocal-mapプロパティはbefore-stringafter-stringdisplayプロパティにより表示された文字列には影響しません。これはポイントがその文字列上にない場合のマウスクリックや、その文字列に関する他のマウスイベントにのみ関係があります。その文字列に特別なマウスイベントをバインドするには、そのイベントをkeymaplocal-mapプロパティに割り当てます。Special Propertiesを参照してください。