Поиск наложений
- Функция: 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)))
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Finding-Overlays.html