本セクションでは、オーバーレイの作成、削除、移動、および内容の確認を行う関数について説明します。オーバーレイはバッファの内容の一部とはみなされないため、オーバーレイの変更はバッファのアンドゥリストに記録されません。
この関数は、object がオーバーレイである場合に t を返します。
この関数は、buffer に属し、start から end までの範囲を持つオーバーレイを作成して返します。start と end にはともにバッファ位置を指定する必要があり、整数またはマーカーを指定できます。buffer を省略した場合、オーバーレイは現在のバッファに作成されます。
start と end が同じバッファ位置を指定するオーバーレイは、空と呼ばれます。空ではないオーバーレイは、start と end の間のテキストが削除されると空になることがあります。その際、オーバーレイはデフォルトでは削除されませんが、‘evaporate’ プロパティを指定することで削除させることができます(evaporate プロパティ を参照)。
引数 front-advance と rear-advance は、テキストが先頭(すなわち start
の前)および末尾に挿入された際にどうなるかを指定します。両者がデフォルトの nil
である場合、オーバーレイは先頭に挿入されたテキストを含むように拡張されますが、末尾に挿入されたテキストは含まれません。front-advance が nil
以外の場合、オーバーレイの先頭に挿入されたテキストはオーバーレイから除外されます。rear-advance
が nil 以外の場合、オーバーレイの末尾に挿入されたテキストはオーバーレイに含まれます。
この関数は、overlay が始まる位置を整数で返します。
この関数は、overlay が終了する位置を整数で返します。
この関数は、overlay が属するバッファを返します。overlay が削除されている場合は、nil を返します。
この関数は、指定された overlay を削除します。オーバーレイは Lisp オブジェクトとして引き続き存在し、そのプロパティリストも変更されませんが、元々属していたバッファからは切り離され、表示にも影響を与えなくなります。
削除されたオーバーレイは、完全に切り離されるわけではありません。move-overlayを呼び出すことで、再度バッファ内に配置できます。
この関数は overlay を buffer に移動し、その境界を当該バッファの start および end に設定します。引数 start と end はいずれもバッファ位置を指定する必要があり、整数またはマーカーを指定できます。
buffer を省略した場合、overlay はそれまで関連付けられていたバッファにそのまま留まります。overlay が以前に削除されていた(したがってどのバッファにも関連付けられていない)場合は、現在のバッファに入ります。
戻り値は overlay です。
この関数は、オーバーレイの端点を変更する唯一の有効な方法です。
この関数は、start と end の間の領域にあるテキストから、プロパティ name に指定された value を持つオーバーレイをすべて削除し、その領域内のテキストにそのようなオーバーレイが影響を及ぼさないようにします。これを実現するために、関数は領域内のオーバーレイを削除したり、その端点を移動させたり、分割したり、あるいはこれらの組み合わせを行ったりすることができます。具体的には:
name または nil
が省略された場合、指定した領域のテキストに影響を与えるすべてのオーバーレイを削除または変更することを意味します。start および/または end、あるいは nil が省略された場合は、それぞれバッファの先頭と末尾がデフォルトとなります。したがって、(remove-overlays) は現在のバッファ内のすべてのオーバーレイを削除します。
名前付きオーバーレイプロパティの値は eq
を用いて比較されます。これは、値がシンボルや固定数以外である場合に重要となります(等価述語を参照)。つまり、関数に渡される値は、オーバーレイプロパティの設定に使用された値そのものである必要があり、そのコピーであってはなりません。異なるオブジェクトは、たとえ内容が同一であっても等しいとは判定されません。
オプション引数 name と value は、ともに指定して
nil 以外とするか、あるいはともに省略して nil とする必要があります。
この関数は overlay のコピーを返します。このコピーは overlay と同じ端点とプロパティを持ちます。ただし、オーバーレイの開始位置および終了位置におけるテキスト挿入タイプは、デフォルト値に設定されます。
以下にいくつか例を挙げます。
;; Create an overlay.
(setq foo (make-overlay 1 10))
⇒ #<overlay from 1 to 10 in display.texi>
(overlay-start foo)
⇒ 1
(overlay-end foo)
⇒ 10
(overlay-buffer foo)
⇒ #<buffer display.texi>
;; Give it a property we can check later.
(overlay-put foo 'happy t)
⇒ t
;; Verify the property is present.
(overlay-get foo 'happy)
⇒ t
;; Move the overlay.
(move-overlay foo 5 20)
⇒ #<overlay from 5 to 20 in display.texi>
(overlay-start foo)
⇒ 5
(overlay-end foo)
⇒ 20
;; Delete the overlay. (delete-overlay foo) ⇒ nil ;; Verify it is deleted. foo ⇒ #<overlay in no buffer> ;; A deleted overlay has no position. (overlay-start foo) ⇒ nil (overlay-end foo) ⇒ nil (overlay-buffer foo) ⇒ nil
;; Undelete the overlay. (move-overlay foo 1 20) ⇒ #<overlay from 1 to 20 in display.texi> ;; Verify the results. (overlay-start foo) ⇒ 1 (overlay-end foo) ⇒ 20 (overlay-buffer foo) ⇒ #<buffer display.texi>
;; Moving and deleting the overlay does not change its properties.
(overlay-get foo 'happy)
⇒ t