GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Overlay-Properties.html ・ emacs-doc.conao3.com

42.9.2 オーバーレイプロパティ

オーバーレイプロパティは、文字の表示方法を変更するプロパティがどちらのソースからも指定できるという点で、テキストプロパティに似ています。しかし、ほとんどの点で異なります。比較については、テキストプロパティを参照してください。

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

同一の文字に対して複数のオーバーレイがプロパティ値を指定できるため、Emacsでは各オーバーレイに優先度を指定できます。この優先度は、重なり合うオーバーレイのうちどれが「優先」されるかを決定するために用いられます。

これらの関数は、オーバーレイのプロパティを読み取ったり設定したりします:

関数: overlay-get overlay prop

この関数は、overlay に記録されているプロパティ prop の値(もしあれば)を返します。overlay にそのプロパティの値が記録されていないものの、シンボルである category プロパティが存在する場合は、そのシンボルの prop プロパティが使用されます。それ以外の場合、値は nil となります。

関数: overlay-put overlay prop value

この関数は、overlayに記録されているプロパティpropの値をvalueに設定します。valueを返します。

関数: overlay-properties overlay

これにより、overlay のプロパティリストのコピーが返されます。

また、指定した文字のオーバーレイプロパティとテキストプロパティの両方を判定する関数 get-char-property も参照してください。テキストプロパティの確認 を参照してください。

多くのオーバーレイプロパティには特別な意味があります。以下にその一覧表を示します。

priority

このプロパティの値によって、オーバーレイの優先度が決まります。優先度の値を指定したい場合は、nil(または0)、正の整数、あるいは2つの値からなるコンスのいずれかを使用してください。それ以外の値を指定すると、未定義の動作となります。

2つ以上のオーバーレイが同一の文字を覆い、かつ両者が同一のプロパティを異なる値で指定している場合、優先度が重要となります。priority の値が高い方が、もう一方を上書きします。(face プロパティの場合、優先度の高いオーバーレイの値がもう一方の値を完全に上書きするわけではありません。代わりに、その個別のフェイス属性が、優先度の低い face プロパティの対応するフェイス属性を上書きします。)2つのオーバーレイが同じ優先度値を持ち、一方が他方に「ネスト」されている(すなわち、カバーするバッファまたは文字列の位置が少ない)場合、内側のオーバーレイが外側のオーバーレイよりも優先されます。どちらもネストされていない場合は、どちらのオーバーレイが優先されるかについて想定すべきではありません。

Lispプログラムが、優先順位が定義されたオーバーレイを、優先順位のないオーバーレイが存在する可能性のあるテキスト上に配置すると、望ましくない結果を招くことがあります。というのも、正の優先順位値を持つオーバーレイは、優先順位のないすべてのオーバーレイを上書きしてしまうためです。オーバーレイを使用するEmacsの機能の多くは、オーバーレイに優先順位を指定していないため、整数の優先順位を使用する際は注意が必要です。整数の優先順位を使用して他のオーバーレイを上書きするリスクを冒す代わりに、(primary . secondary) という形式の優先順位値を使用できます。ここで primary の値は前述の通り使用され、secondary は primary やネストに関する考慮事項でオーバーレイ間の優先順位が解決できなかった場合に使用されるフォールバック値となります。特に、n を正の整数とした優先順位値 (nil . n) を使用すれば、他のオーバーレイを完全に上書きすることなく、必要に応じてオーバーレイを優先順位順に並べ替えることができます。

現在、すべてのオーバーレイがテキストプロパティより優先されます。

オーバーレイを優先順位順に配置する必要がある場合は、overlays-at の sorted 引数を使用してください。オーバーレイの検索を参照してください。

window

window プロパティが nil 以外の場合、オーバーレイはそのウィンドウにのみ適用されます。

category

オーバーレイに category プロパティがある場合、それをオーバーレイのカテゴリと呼びます。これはシンボルである必要があります。このシンボルのプロパティは、オーバーレイのプロパティのデフォルト値として機能します。

face

このプロパティはテキストの外観を制御します(Facesを参照)。プロパティの値には、以下が指定可能です。

  • 顔名(記号または文字列)。
  • 匿名のフェイス:(keyword value …) 形式のプロパティリスト。ここで、各 keyword はフェイス属性名、value はその属性の値である。
  • フェイスの一覧。各リスト要素は、フェイス名または匿名フェイスのいずれかである必要があります。これは、リストされた各フェイスの属性を集約したフェイスを指定します。リストの前方に現れるフェイスほど優先度が高くなります。
  • (foreground-color . color-name) または (background-color . color-name) 形式の cons セル。これは (:foreground color-name) や (:background color-name) と同様に、前景色または背景色を指定します。この形式は後方互換性のためだけにサポートされており、使用を避けるべきです。
mouse-face

このプロパティは、マウスがオーバーレイの範囲内にある場合に face の代わりに使用されます。ただし、Emacs はこのプロパティのうち、テキストサイズを変更するすべてのフェイス属性(例::height、:weight、:slant)を無視します。これらの属性は、ハイライトされていないテキストの場合と常に同一です。

display

このプロパティは、テキストの表示方法を変更するさまざまな機能を有効にします。例えば、テキストをより高く、あるいは低く、より高く、あるいは低く、より広く、あるいは狭く表示したり、画像に置き換えたりすることができます。display プロパティを参照してください。なお、display プロパティが置換プロパティである場合(テキストを置換する表示仕様を参照)、同じオーバーレイ内の invisible プロパティは無視されます。

help-echo

オーバーレイに help-echo プロパティが設定されている場合、オーバーレイ内のテキストにマウスを合わせると、Emacs はエコーエリアにヘルプ文字列を表示するか、ツールチップとして表示します。詳細は テキストヘルプエコー を参照してください。

field

同一の field プロパティを持つ連続した文字は、フィールドを構成します。forward-word や beginning-of-line を含む一部のモーション関数は、フィールドの境界で停止します。フィールドの定義と使用を参照してください。

modification-hooks

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

フック関数は、各変更の前後でいずれも呼び出されます。これらの関数が受け取った情報を保存し、呼び出し間で情報を照合すれば、バッファテキストにどのような変更が加えられたかを正確に特定できます。

変更前に呼び出される際、各関数にはオーバーレイ、nil、および変更対象のテキスト範囲の開始位置と終了位置という4つの引数が渡されます。

変更後に呼び出される際、各関数には5つの引数が渡されます。具体的には、オーバーレイ、t、直前に変更されたテキスト範囲の開始位置と終了位置、およびその範囲で置換された変更前のテキストの長さです。(挿入の場合、変更前の長さは0となります。削除の場合、その長さは削除された文字数となり、変更後の開始位置と終了位置は同一になります。)

これらの関数が呼び出される際、inhibit-modification-hooks は non-nil にバインドされます。関数がバッファを変更する場合、それらの変更に対してチェンジフックが実行されるよう、inhibit-modification-hooks を nil にバインドしたい場合があります。ただし、これを行うと自身のチェンジフックが再帰的に呼び出される可能性があるため、その点に十分注意してください。チェンジフック を参照してください。

テキストプロパティも modification-hooks プロパティをサポートしていますが、詳細は多少異なります(特別な意味を持つプロパティを参照してください)。

insert-in-front-hooks

このプロパティの値は、オーバーレイの先頭にテキストを挿入する前後で呼び出される関数のリストです。呼び出し規約はmodification-hooks関数と同様です。

insert-behind-hooks

このプロパティの値は、オーバーレイの末尾にテキストを挿入する前後で呼び出される関数のリストです。呼び出し規約はmodification-hooks関数と同様です。

invisible

invisible プロパティを使用すると、オーバーレイ内のテキストを不可視にでき、つまり画面上に表示されなくなります。ただし、オーバーレイで覆われているテキストに 置換 display プロパティが指定されている場合、置換用の display プロパティはテキストのプロパティを確認せずにスキップするため、invisible プロパティは無視されます。詳細は 不可視テキスト を参照してください。

intangible

オーバーレイの intangible プロパティは、intangible テキストプロパティと同様に動作します。現在は非推奨となっています。詳細は 特別な意味を持つプロパティ を参照してください。

isearch-open-invisible

このプロパティは、最終的なマッチ箇所がオーバーレイと重なる場合に、不可視のオーバーレイを恒久的に表示させる方法をインクリメンタル検索(The GNU Emacs ManualのIncremental Searchを参照)に指示します。Invisible Textを参照してください。

isearch-open-invisible-temporary

このプロパティは、インクリメンタルサーチにおいて、検索中に一時的に不可視のオーバーレイを表示させる方法を指定します。Invisible Textを参照してください。

before-string

このプロパティの値は、オーバーレイの先頭の表示に追加される文字列です。この文字列はいかなる意味でもバッファには格納されず、画面上にのみ表示されます。なお、オーバーレイ先頭のテキストを非表示にした場合、この文字列は表示されません。

after-string

このプロパティの値は、オーバーレイの末尾の表示に追加される文字列です。この文字列はいかなる意味でもバッファには格納されず、画面上にのみ表示されます。なお、オーバーレイ末尾のテキストを非表示にした場合、この文字列は表示されません。

line-prefix

このプロパティは、表示時に各非継続行の先頭に付加する表示仕様を指定します。切り捨てを参照してください。

wrap-prefix

このプロパティは、表示時に各継続行の先頭に付加する表示仕様を指定します。切り捨てを参照してください。

evaporate

このプロパティが non-nil である場合、オーバーレイが空になると(すなわち、その長さがゼロになると)、自動的に削除されます。空のオーバーレイ(空のオーバーレイを参照)に non-nil evaporate プロパティを指定すると、直ちに削除されます。なお、オーバーレイがこのプロパティを持たない限り、開始位置と終了位置の間のテキストがバッファから削除されても、オーバーレイは削除されません。

display-line-numbers-disable

このプロパティは、このプロパティを持つオーバーレイ内のテキストについて、行番号(The GNU Emacs Manualのdisplay-line-numbersを参照)の表示を抑制します。このプロパティを持つオーバーレイが有用な場面の一つに、バッファ末尾の空のオーバーレイがあります。そうでない場合、そこでの行番号の表示を防ぐ方法がないためです。

keymap

このプロパティが non-nil の場合、テキストの一部に対するキーマップを指定します。このキーマップは他のほとんどのキーマップよりも優先され(アクティブキーマップを参照)、point がオーバーレイ内にある場合に使用されます。このとき、front- および rear-advance プロパティによって、境界が 範囲内 とみなされるかどうかが決定されます。

local-map

local-map プロパティは keymap と同様ですが、既存のキーマップを拡張するのではなく、バッファのローカルマップを置き換えます。このため、マイナーモードのキーマップよりも優先度が低くなります。

keymap および local-map プロパティは、before-string、after-string、または display プロパティによって表示される文字列には影響しません。ポイントが文字列上に位置することはないため、この仕様が関係するのは、文字列上で発生するマウスクリックやその他のマウスイベントのみです。文字列に特殊なマウスイベントを紐付けるには、keymap または local-map テキストプロパティを割り当ててください。特殊な意味を持つプロパティを参照してください。