Next: , Previous: , Up: オーバーレイ   [Contents][Index]


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

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

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

複数のオーバーレイが同じ文字にたいしてプロパティ値を指定できるので、Emacsは各オーバーレイにたいして優先度の指定を促します。優先度の値はオーバーラップするオーバーレイのどちらが“勝つ”かを判断するために使用されます。

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

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も参照してください。テキストプロパティを調べるを参照してください。

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

priority

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

2つ以上のオーバーレイが同じ文字をカバーし、それぞれが同じプロパティに違う値を指定する場合には優先度が重要になる。そのような場合には他よりpriorityの値が大きいほうが他をオーバーライドする(faceプロパティにたいしては、より高い優先度のオーバーレイの値は他の値を完全にはオーバーライドしない; それぞれのface属性にたいしてより高い優先度のface属性が低い優先度のfaceプロパティのface属性をオーバーライドする)。2つのオーバーレイが同じ優先値をもち、一方がもう一方に“ネスト”されている(カバーしているバッファーや文字列位置が小さい)場合には、内側のオーバーレイが外側のオーバーレイより優先される。いずれのオーバーレイも他方にネストされていなければ、どちらのオーバーレイが優先するかを仮定しないこと。

優先度のないオーバーレイをもつかもしれないテキストにLispプログラムが優先度を定義する際には、望ましくない結果が生じるかもしれない。なぜなら優先度のないオーバーレイは、正の優先度をもつすべてのオーバーレイにオーバーライドされてしまうからである。Emacsのほとんどの機能は優先度を指定せずにオーバーレイを使っているため、整数の優先度の使用には注意を要する。整数の優先度を使用することによって他のオーバーレイをオーバーライドしてしまう危険を冒すかわりに、(primary . secondary)という形式の値を優先度にすることができる。ここでprimaryは上述のように使用されるが、primaryにたいするネスト状況の検討においてそれぞれのオーバーレイの間の優先度の解決に失敗した際に用いられるフォールバック値がsecondaryである。特に優先度の値として(nil . n)nに正の整数を指定すると、他のオーバーレイを完全にオーバーライドせずに、必要に応じてオーバーレイを優先度順に並べることができる。

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

優先度順にオーバーレイを配置する必要がある場合には、overlays-atsorted引数を用いることができる。See オーバーレイにたいする検索を参照のこと。

window

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

category

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

face

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

  • フェイス名(シンボルか文字列)。
  • anonymousフェイス: (keyword value …)という形式のプロパティリストでありkeywordはフェイス属性名、valueはその属性の値。
  • フェイスのリスト。リストの要素はそれぞれフェイス名かanonymousフェイスのいずれかであること。これはリストされた各フェイスの属性を集約するフェイスを指定する。このリスト内で先に出現するフェイスが、より高い優先度をもつ。
  • (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-wordbeginning-of-lineを含むいくつかの移動関数はフィールド境界で移動を停止する。フィールドの定義と使用を参照のこと。

modification-hooks

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

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

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

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

これらの関数が呼び出される際にはinhibit-modification-hooksが、非nilにバインドされる。関数がバッファーを変更した場合には変更にたいして変更フックが実行されるように、inhibit-modification-hooksnilにバインドしたいと思うかもしれない。しかしこれを行うことにより、あなた自身の変更フックが再帰的に呼び出されるかもしれないので、それに確実に備える必要がある。フックの変更を参照のこと。

テキストプロパティも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を参照)にたいして非nilevaporateプロパティを与えた場合には即座に削除される。オーバーレイがこのプロパティをもたなければ、バッファーからオーバーレイの開始位置と終了位置の間のテキストが削除された際に削除されないことに注意。

keymap

このプロパティがnilなら、そのテキスト範囲にたいしてキーマップを指定する。このキーマップはポイントがオーバーレイ内部(境界だ内部か否かの定義にはfront-advanceおよびrear-advanceのプロパティを考慮する)にあるとき使用されて、他のほとんどのキーマップ(アクティブなキーマップを参照)より優先される。

local-map

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

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


Next: オーバーレイにたいする検索, Previous: オーバーレイの管理, Up: オーバーレイ   [Contents][Index]