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

42.9.3 オーバーレイの検索

関数: overlays-at pos &optional sorted

この関数は、現在のバッファにおいて位置 pos に文字を含むすべてのオーバーレイのリストを返します。sorted が nil でない場合、返されるリストは優先度の降順となり、そうでない場合は特に順序はありません。オーバーレイが pos 以降に始まり、かつ pos より後に終わる場合、そのオーバーレイは pos の文字を含みます。

使い方の例として、ポイントにある文字のプロパティ prop を指定するオーバーレイのリストを返す Lisp 関数を以下に示します。

(defun find-overlays-specifying (prop)
  (let ((overlays (overlays-at (point)))
        found)
    (while overlays
      (let ((overlay (car overlays)))
        (if (overlay-get overlay prop)
            (setq found (cons overlay found))))
      (setq overlays (cdr overlays)))
    found))

空のオーバーレイ(空のオーバーレイを参照)には文字が含まれていないため、この関数はそれらを返しません。空のオーバーレイが必要な場合は、代わりに後述する overlays-in を使用してください。

なお、pos がナローイングの範囲外にある場合、この関数は現在のバッファのナローイング範囲外のオーバーレイを返すことがあります(Narrowing を参照)。

関数: overlays-in beg end

この関数は、領域 beg から end までと重なるオーバーレイの一覧を返します。オーバーレイが領域と重なるとは、そのオーバーレイに beg から end までの文字が1つ以上含まれている場合を指し、end の位置にある(すなわちそれ以降の)文字は除外されます。

空のオーバーレイには文字が含まれないため、それらを含めるためのルールが異なります。具体的には、begにある場合、endを除いたbegとendの厳密な間にある場合、あるいはendがバッファ末尾の位置を示す場合にendにある場合に、オーバーラップしているとみなされます。(バッファ末尾における空のオーバーレイを特別に扱うのは、そのようなオーバーレイを検出して処理できるようにするためです。endにそれ以外の値が設定されている場合は、代わりにendの位置をインクリメントできます。)なお、begとendが同じ位置である場合、begにある空のオーバーレイはendにも位置することになるため、このケースはバッファ末尾にある空のオーバーレイとある程度似ています。

返されるリストにおけるオーバーレイの表示順は不定です。

なお、beg および/または end がバッファの現在の狭域範囲外にある場合、この関数は現在の狭域範囲外のオーバーレイを返す可能性があることに注意してください。

関数: next-overlay-change pos

この関数は、pos の次にあるオーバーレイの開始位置または終了位置のバッファ位置を返します。該当するものがない場合は、(point-max) を返します。

関数: previous-overlay-change pos

この関数は、pos より前のオーバーレイの直前の開始位置または終了位置のバッファ位置を返します。該当する位置がない場合は、(point-min) を返します。

例として、プリミティブ関数 next-single-char-property-change の簡略版(かつ非効率な実装)を以下に示します(テキストプロパティ検索関数を参照)。この関数は、位置 pos から前方を検索し、オーバーレイまたはテキストプロパティのいずれかから取得した特定のプロパティ prop の値が変更される次の位置を探します。

(defun next-single-char-property-change (position prop)
  (save-excursion
    (goto-char position)
    (let ((propval (get-char-property (point) prop)))
      (while (and (not (eobp))
                  (eq (get-char-property (point) prop) propval))
        (goto-char (min (next-overlay-change (point))
                        (next-single-property-change (point) prop)))))
    (point)))