Характеристики отображения, заменяющие текст
Некоторые виды характеристик отображения указывают на то, что нужно отобразить вместо текста, у которого есть свойство. Эти характеристики называются заменяющими характеристиками отображения. Emacs не позволяет пользователю интерактивно перемещать точку в середину буферного текста, который заменяется таким образом.
Если список характеристик отображения содержит более одной заменяющей характеристики отображения, первая переопределяет остальные. Заменяющие характеристики отображения делают большинство других характеристик отображения неактуальными, поскольку те не применяются к замене.
Для заменяющих характеристик отображения текст, у которого есть свойство, означает все последовательные символы, у которых один и тот же объект Lisp является их свойством display; эти символы заменяются как единый блок. Если два символа имеют разные объекты Lisp в качестве своих свойств display (т. е. объекты, которые не являются eq), они обрабатываются раздельно.
Вот пример, который иллюстрирует этот момент. Строка служит заменяющей характеристикой отображения, которая заменяет текст, имеющий свойство, указанной строкой (см. Другие характеристики отображения). Рассмотрим следующую функцию:
(defun foo ()
(dotimes (i 5)
(let ((string (concat "A"))
(start (+ i i (point-min))))
(put-text-property start (1+ start) 'display string)
(put-text-property start (+ 2 start) 'display string))))
Эта функция присваивает каждому из первых десяти символов в буфере свойство display, которое является строкой "A", но не все они получают одну и ту же строку-объект. Первые два символа получают один и тот же строковый объект, поэтому они заменяются на один ‘A’; тот факт, что свойство отображения было назначено в двух отдельных вызовах put-text-property, не имеет значения. Аналогично, следующие два символа получают вторую строку (concat создает новый строковый объект), поэтому они заменяются на один ‘A’; и так далее. Таким образом, десять символов отображаются как пять A.
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/Replacing-Specs.html