42.9.1 オーバーレイの管理

このセクションではオーバーレイの作成、削除、移動、およびそれらのコンテンツを調べる関数を説明します。オーバーレイはバッファーのコンテンツの一部とはみなされないため、その変更はバッファーのundoリストに記録されません。

Function: overlayp object

この関数はobjectがオーバーレイならtをリターンする。

Function: make-overlay start end &optional buffer front-advance rear-advance

この関数はbufferに属する、startからendの範囲のオーバーレイを作成してリターンする。startendはいずれもバッファーの位置を指定しなければならず、整数かマーカーを指定できる。bufferが省略されると、そのオーバーレイはカレントバッファーに作成される。

startendが同一のバッファー位置を指定するオーバーレイは空(empty)のオーバーレイとして知られる。startendの間のテキストが削除されれば、非空のオーバーレイも空になり得る。これが発生したとき、デフォルトではオーバーレイは削除されないが、‘evaporate’プロパティを与えることにより削除されるようにできる(evaporate propertyを参照)。

引数front-advancerear-advanceはそれぞれ、先頭(startの前)あるいは終端にテキストが挿入された際に何が起こるかを指定する。どちらもnil (デフォルト)なら、そのオーバーレイは先頭に挿入された任意のテキストを含むように拡張されるが、終端に挿入されたテキストにたいしては拡張されない。front-advanceが非nilなら、オーバーレイの先頭に挿入されたテキストはオーバーレイから除外される。rear-advanceが非nilなら、オーバーレイの終端に挿入されたテキストはオーバーレイに含まれる。

Function: overlay-start overlay

この関数はoverlayが開始する位置を整数でリターンする。

Function: overlay-end overlay

この関数はoverlayが終了する位置を整数でリターンする。

Function: overlay-buffer overlay

この関数はoverlayが所属するバッファーをリターンする。overlayが削除されていたらnilをリターンする。

Function: delete-overlay overlay

この関数は指定されたoverlayを削除する。そのオーバーレイはLispオブジェクトとして存在し続けて、そのプロパティリストは変更されないがバッファーへの所属と表示にたいするすべての効果を失う。

削除済みオーバーレイが永続的に非接続という訳ではない。move-overlayを呼び出すことによりバッファー内の位置を与えることができる。

Function: move-overlay overlay start end &optional buffer

この関数はoverlaybufferに移動して、その境界をバッファー内のstartendに配置する。startendの引数はいずれもバッファーの位置を指定しなければならず、整数かマーカーを指定できる。

bufferが省略された場合、overlayはすでに関連付けられている同じバッファーに留まる。さらにoverlayが以前に削除されている(つまりどのバッファーにも関連付けられていない)場合にはカレントバッファーに所属させる。

リターン値はoverlay

これはオーバーレイの終端位置を変更する唯一の有効な手段となる関数である。

Function: remove-overlays &optional start end name value

この関数はstartendの間のリージョンのテキストにたいして、名前がnameで値がvalueであるようなすべてのオーバーレイをクリアする。これを可能にするために、この関数はリージョン内のオーバーレイ削除や終端の移動、分割、あるいはこれらを組み合わせた処理を行えるようになっている。具体的には:

  • 開始がstart以降で終了がend以前であるようなオーバーレイは完全に削除される。
  • 開始がstartより前で終了がendより後であるようなオーバーレイは、startで終了するように変更される。
  • 開始がstart以降で終了がend以降であるようなオーバーレイは、endが開始になるように変更される。
  • 開始がstartより前で終了がendより後であるようなオーバーレイは一方がstartで終わり、もう一方はendで始まるような2つのオーバーレイに分割される。

nameが省略かnilなら、それは指定されたリージョン内で影響を受けるのすべてのオーバーレイを削除または変更することを意味する。startおよび/またはendが省略かnilなら、それぞれバッファーの先頭と終端がデフォルトになることを意味する。したがって(remove-overlays)はカレントバッファー内のすべてのオーバーレイを削除する。

名前つきのオーバーレイプロパティの値の比較にはeqを使用する。これは値がシンボルfixnumでなければ重要である(同等性のための述語を参照)。関数に渡される値がオーバーレイプロパティに用いられた値のコピーでは等しくならないことを意味するからだ。たとえ内容が同じであっても、オブジェクトが異なれば比較しても等しくならない。

オプション引数namevalueはどちらも非nil、あるいはどちらも省略かnilで渡すこと。

Function: copy-overlay overlay

この関数はoverlayのコピーをリターンする。このコピーはoverlayと同じ両端位置とプロパティをもつ。しかしオーバーレイの開始と終了にたいするテキスト挿入タイプはデフォルト値にセットされる。

以下にいくつか例を示します:

;; オーバーレイを作成
(setq foo (make-overlay 1 10))
     ⇒ #<overlay from 1 to 10 in display-ja.texi>
(setq selective-display 2)
     ⇒ 2

(overlay-end foo)
     ⇒ 10
(overlay-buffer foo)
     ⇒ #<buffer display-ja.texi>
;; 後でチェック可能なプロパティを付与
(overlay-put foo 'happy t)
     ⇒ t
;; 付与されたか検証
(overlay-get foo 'happy)
     ⇒ t
;; オーバーレイを移動
(move-overlay foo 5 20)
     ⇒ #<overlay from 5 to 20 in display-ja.texi>
(overlay-start foo)
     ⇒ 5
(overlay-end foo)
     ⇒ 20
;; オーバーレイを削除
(delete-overlay foo)
     ⇒ nil
;; 削除の検証
foo
     ⇒ #<overlay in no buffer>
;; 削除済みオーバーレイは位置をもたない
(overlay-start foo)
     ⇒ nil
(overlay-end foo)
     ⇒ nil
(overlay-buffer foo)
     ⇒ nil
;; 削除を取り消す
(move-overlay foo 1 20)
     ⇒ #<overlay from 1 to 20 in display-ja.texi>
;; 結果の検証
(overlay-start foo)
     ⇒ 1
(overlay-end foo)
     ⇒ 20
(overlay-buffer foo)
     ⇒ #<buffer display-ja.texi>
;; 移動や削除によってオーバーレイのプロパティは変更されない
(overlay-get foo 'happy)
     ⇒ t

This page has generated for branch:work/emacs-30_69b16e5c63840479270d32f58daea923fe725b90, commit:5e3f74b56ff47b5bcef2526c70f53f749bbd45f6 to check Japanese translation.