42.9.3 Поиск наложений

Функция: overlays-at pos &optional sorted

Эта функция возвращает список всех наложений, которые покрывают символ в позиции pos в текущем буфере. Если sorted не равно nil, список отсортирован по убыванию приоритета; в противном случае он не имеет определенного порядка. Наложение содержит позицию pos, если оно начинается не позднее pos и заканчивается после pos.

Для иллюстрации использования приводится функция Lisp, которая возвращает список наложений, определяющих свойство prop для символа в точке:

(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 beg end

Эта функция возвращает список наложений, которые перекрывают область от beg до end. Наложение перекрывает область, если оно содержит один или более символов в этой области; пустые наложения (см. пустое наложение) перекрывают, если они находятся в beg, строго между beg и end, или в end, когда 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)))