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

42.9.1 オーバーレイの管理

本セクションでは、オーバーレイの作成、削除、移動、および内容の確認を行う関数について説明します。オーバーレイはバッファの内容の一部とはみなされないため、オーバーレイの変更はバッファのアンドゥリストに記録されません。

関数: overlayp object

この関数は、object がオーバーレイである場合に t を返します。

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

この関数は、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-start overlay

この関数は、overlay が始まる位置を整数で返します。

関数: overlay-end overlay

この関数は、overlay が終了する位置を整数で返します。

関数: overlay-buffer overlay

この関数は、overlay が属するバッファを返します。overlay が削除されている場合は、nil を返します。

関数: delete-overlay overlay

この関数は、指定された overlay を削除します。オーバーレイは Lisp オブジェクトとして引き続き存在し、そのプロパティリストも変更されませんが、元々属していたバッファからは切り離され、表示にも影響を与えなくなります。

削除されたオーバーレイは、完全に切り離されるわけではありません。move-overlayを呼び出すことで、再度バッファ内に配置できます。

関数: move-overlay overlay start end &optional buffer

この関数は overlay を buffer に移動し、その境界を当該バッファの start および end に設定します。引数 start と end はいずれもバッファ位置を指定する必要があり、整数またはマーカーを指定できます。

buffer を省略した場合、overlay はそれまで関連付けられていたバッファにそのまま留まります。overlay が以前に削除されていた(したがってどのバッファにも関連付けられていない)場合は、現在のバッファに入ります。

戻り値は overlay です。

この関数は、オーバーレイの端点を変更する唯一の有効な方法です。

関数: remove-overlays &optional start end name value

この関数は、start と end の間の領域にあるテキストから、プロパティ name に指定された value を持つオーバーレイをすべて削除し、その領域内のテキストにそのようなオーバーレイが影響を及ぼさないようにします。これを実現するために、関数は領域内のオーバーレイを削除したり、その端点を移動させたり、分割したり、あるいはこれらの組み合わせを行ったりすることができます。具体的には:

  • start以降に始まり、endより前に終わるオーバーレイは、完全に削除されます。
  • start より前に始まり、start より後かつ end より前に終わるオーバーレイは、start で終わるように変更されます。
  • start以降に始まり、endより後に終わるオーバーレイは、endから始まるように変更されます。
  • start より前に始まり end より後に終わるオーバーレイは、start で終わるものと end から始まるものの2つのオーバーレイに分割されます。
  • 空のオーバーレイ(空のオーバーレイを参照)は、startにある場合、endを除いたstartとendの厳密な範囲内にある場合、またはendがバッファ末尾の位置を示す場合にendにある場合に、削除されます。

name または nil が省略された場合、指定した領域のテキストに影響を与えるすべてのオーバーレイを削除または変更することを意味します。start および/または end、あるいは nil が省略された場合は、それぞれバッファの先頭と末尾がデフォルトとなります。したがって、(remove-overlays) は現在のバッファ内のすべてのオーバーレイを削除します。

名前付きオーバーレイプロパティの値は eq を用いて比較されます。これは、値がシンボルや固定数以外である場合に重要となります(等価述語を参照)。つまり、関数に渡される値は、オーバーレイプロパティの設定に使用された値そのものである必要があり、そのコピーであってはなりません。異なるオブジェクトは、たとえ内容が同一であっても等しいとは判定されません。

オプション引数 name と value は、ともに指定して nil 以外とするか、あるいはともに省略して nil とする必要があります。

関数: copy-overlay overlay

この関数は 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