Управление накладками
В этом разделе описаны функции для создания, удаления и перемещения накладок, а также для проверки их содержимого. Изменения накладок не записываются в список отмены/повтора буфера, так как накладки не являются частью содержимого буфера.
- Функция: overlayp объект
Эта функция возвращает
tесли объект является накладкой.
- Функция: make-overlay начало конец &optional буфер перед-сдвиг зад-сдвиг
-
Эта функция создаёт и возвращает накладку, принадлежащую буферу и охватывающую область от начала до конца. И начало, и конец должны указывать на позиции в буфере; они могут быть целыми числами или метками. Если буфер опущен, накладка создаётся в текущем буфере.
Накладка, у которой начало и конец указывают на одну и ту же позицию в буфере, называется пустой. Непустая накладка может стать пустой, если текст между началом и концом будет удалён. В этом случае накладка по умолчанию не удаляется, но можно заставить её удалить, присвоив ей свойство «evaporate» (см. свойство evaporate).
Аргументы перед-сдвиг и зад-сдвиг задают тип вставки маркера для начала накладки и для конца накладки соответственно. См. Типы вставки маркеров. Если оба они
nil, по умолчанию, то накладка включает в себя любой текст, вставленный в начало, но не текст, вставленный в конец. Если перед-сдвиг неnil, текст, вставленный в начало накладки, исключается из накладки. Если зад-сдвиг неnil, текст, вставленный в конец накладки, включается в накладку.
- Функция: overlay-start накладка
Эта функция возвращает позицию, с которой начинается накладка, как целое число.
- Функция: overlay-end накладка
Эта функция возвращает позицию, на которой заканчивается накладка, как целое число.
- Функция: overlay-buffer накладка
Эта функция возвращает буфер, которому принадлежит накладка. Возвращает
nilесли накладка была удалена.
- Функция: delete-overlay накладка
-
Эта функция удаляет накладку. Накладка продолжает существовать как объект Lisp, и её список свойств не изменяется, но она перестаёт быть прикреплённой к буферу, к которому она принадлежала, и перестаёт оказывать какое-либо влияние на отображение.
Удаленная накладка не отсоединяется окончательно. Её можно снова разместить в буфере, вызвав
move-overlay.
- Функция: move-overlay накладка начало конец &optional буфер
-
Эта функция перемещает накладку в буфер и устанавливает её границы в начало и конец. И начало, и конец должны указывать на позиции в буфере; они могут быть целыми числами или метками.
Если буфер опущен, накладка остаётся в том же буфере, к которому она уже была связана; если накладка была удалена, она попадает в текущий буфер.
Возвращаемым значением является накладка.
Это единственный корректный способ изменить конечные точки накладки. Не пытайтесь изменять маркеры в накладке вручную, так как это не обновляет другие важные структуры данных и может привести к потере некоторых накладок.
- Функция: remove-overlays &optional начало конец имя значение
-
Эта функция удаляет все накладки между началом и концом, у которых свойство имя имеет значение значение. Она может перемещать конечные точки накладок в области или разделять их.
Если имя опущено или
nil, это означает удаление всех накладок в указанной области. Если начало и/или конец опущены илиnil, это означает начало и конец буфера соответственно. Поэтому,(remove-overlays)удаляет все накладки в текущем буфере.
- Функция: copy-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
Emacs хранит накладки каждого буфера в двух списках, разделённых произвольной центральной позицией. Один список простирается назад через буфер от этой центральной позиции, а другой — вперёд от этой центральной позиции. Центральная позиция может быть где угодно в буфере.
- Функция: overlay-recenter позиция
Эта функция переносит центр накладок текущего буфера вокруг позиции позиция. Это ускоряет поиск накладок для позиций, близких к позиции, но замедляет поиск для позиций, удалённых от позиции.
Цикл, который сканирует буфер вперёд, создавая накладки, может работать быстрее, если вы сделаете (overlay-recenter (point-max)) сначала.
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/Managing-Overlays.html