该函数返回当前缓冲区中覆盖位置 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))
该函数返回与区域 beg 至 end 存在重叠的覆盖层列表。一个覆盖层与区域重叠,是指其包含 区域内的一个或多个字符;空覆盖层(see empty overlay)在位于 beg、 严格介于 beg 与 end 之间,或位于 end(当 end 表示缓冲区可访问部分末尾位置时) 的情况下视为重叠。
该函数返回 pos 之后下一个覆盖层起始或结束的缓冲区位置。若无此类位置,则返回 (point-max)。
该函数返回 pos 之前上一个覆盖层起始或结束的缓冲区位置。若无此类位置,则返回 (point-min)。
举个例子,以下是原语函数 next-single-char-property-change(see 文本属性搜索函数)
的简化(且低效)版本。它从位置 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)))