Spec-Zone.ru › Elisp

Вязкость свойств текста

Автовставляемые символы, которые вставляются в буфер при вводе пользователя (см. Команды для вставки), обычно принимают те же свойства, что и предыдущий символ. Это называется наследованием свойств.

В отличие от этого, программа Lisp может выполнять вставку с наследованием или без него, в зависимости от выбора примитива вставки. Обычные функции вставки текста, такие как insert, не наследуют никаких свойств. Они вставляют текст с точными свойствами вставляемой строки и никакими другими. Это правильно для программ, которые копируют текст из одного контекста в другой — например, в буфер обмена или из него. Для вставки с наследованием используйте специальные примитивы, описанные в этом разделе. Автовставляемые символы наследуют свойства, поскольку они работают с использованием этих примитивов.

Когда вы выполняете вставку с наследованием, какие свойства наследуются и откуда, зависит от того, какие свойства являются вязкими. Вставка после символа наследует те из его свойств, которые являются задневязкими. Вставка перед символом наследует те из его свойств, которые являются передневязкими. Когда обе стороны предлагают разные значения вязкости для одного и того же свойства, значение предыдущего символа имеет приоритет.

По умолчанию свойство текста является задневязким, но не передневязким; таким образом, по умолчанию наследуются все свойства предыдущего символа, а ничего от следующего символа.

Вы можете контролировать вязкость различных свойств текста с помощью двух конкретных свойств текста, front-sticky и rear-nonsticky, и с переменной text-property-default-nonsticky. Вы можете использовать переменную, чтобы указать другой параметр по умолчанию для данного свойства. Вы можете использовать эти два свойства текста, чтобы сделать какие-либо конкретные свойства вязкими или неввязкими в любой конкретной части текста.

Если свойство символа front-sticky равно t, то все его свойства являются передневязкими. Если свойство front-sticky является списком, то вязкими свойствами символа являются те, имена которых находятся в списке. Например, если у символа есть свойство front-sticky, значение которого равно (face read-only), то при вставке перед символом могут быть унаследованы его свойство face и его свойство read-only, но не другие.

Свойство rear-nonsticky работает в обратном порядке. Большинство свойств по умолчанию являются задневязкими, поэтому свойство rear-nonsticky указывает, какие свойства не являются задневязкими. Если свойство символа rear-nonsticky равно t, то ни одно из его свойств не является задневязким. Если свойство rear-nonsticky является списком, то свойства являются задневязкими, если только их имена не находятся в списке.

Переменная: text-property-default-nonsticky

Эта переменная содержит список, который определяет вязкость по умолчанию различных свойств текста. Каждый элемент имеет вид (property . nonstickiness), и он определяет вязкость конкретного свойства текста, property.

Если nonstickiness не является nil, это означает, что свойство property по умолчанию является задненевязким. Поскольку все свойства по умолчанию являются передненевязкими, это делает property неввязким в обоих направлениях по умолчанию.

Свойства текста front-sticky и rear-nonsticky, при использовании, имеют приоритет над параметром по умолчанию nonstickiness, указанным в text-property-default-nonsticky.

Вот функции, которые вставляют текст с наследованием свойств:

Функция: insert-and-inherit &rest strings

Вставить строки strings, точно так же, как функция insert, но наследовать любые вязкие свойства из смежного текста.

Функция: insert-before-markers-and-inherit &rest strings

Вставить строки strings, точно так же, как функция insert-before-markers, но наследовать любые вязкие свойства из смежного текста.

См. Вставка для обычных функций вставки, которые не наследуют.

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/Sticky-Properties.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API