Самовставляющиеся символы, те, которые вставляются в буфер, когда пользователь их вводит (см. Команды вставки на уровне пользователя), обычно наследуют те же свойства, что и предшествующий символ. Это называется наследованием свойств.
В отличие от этого, программа на Lisp может выполнять вставку с наследованием или без него, в зависимости от выбранной примитивной вставки. Обычные функции вставки текста, такие как insert, не наследуют никаких свойств. Они вставляют текст с точно теми свойствами строки, которая вставляется, и никакими другими. Это правильно для программ, которые копируют текст из одного контекста в другой — например, в буфер обмена или из него. Чтобы вставить с наследованием, используйте специальные примитивы, описанные в этом разделе. Символы, вставляющиеся сами, наследуют свойства, потому что они работают с использованием этих примитивов.
Когда вы выполняете вставку с наследованием, какие свойства наследуются и откуда, зависит от того, какие свойства являются стойкими. Вставка после символа наследует свойства его свойств, которые являются rear-sticky (стойкими сзади). Вставка перед символом наследует свойства его свойств, которые являются front-sticky (стойкими спереди). Если обе стороны предлагают разные значения стойкости для одного и того же свойства, приоритет имеет значение предыдущего символа.
По умолчанию свойство текста является rear-sticky, но не front-sticky; таким образом, по умолчанию наследуются все свойства предшествующего символа, и ничего от последующего символа.
Вы можете контролировать стойкость различных свойств текста с помощью двух специальных свойств текста, front-sticky и rear-nonsticky, а также с помощью переменной text-property-default-nonsticky. Вы можете использовать эту переменную, чтобы указать другой вариант по умолчанию для данного свойства. Вы можете использовать эти два свойства текста, чтобы сделать любые конкретные свойства стойкими или нестойкими в определенной части текста.
Если свойство front-sticky символа равно t, то все его свойства являются front-sticky. Если свойство front-sticky является списком, то стойкими свойствами символа являются те, чьи имена находятся в списке. Например, если у символа есть свойство front-sticky со значением (face read-only), то вставка перед символом может наследовать его свойство face и свойство read-only, но не другие.
Свойство rear-nonsticky работает наоборот. Большинство свойств по умолчанию являются rear-sticky, поэтому свойство rear-nonsticky указывает, какие свойства не являются rear-sticky. Если свойство rear-nonsticky символа равно t, то ни одно из его свойств не является rear-sticky. Если свойство rear-nonsticky является списком, свойства являются rear-sticky если только их имена не находятся в списке.
Эта переменная содержит alist, который определяет значение по умолчанию для rear-stickiness различных свойств текста. Каждый элемент имеет вид (property . nonstickiness), и он определяет стойкость определенного свойства текста, property.
Если nonstickiness не равно nil, это означает, что свойство property по умолчанию не является rear-sticky. Поскольку по умолчанию все свойства не являются front-sticky, это делает property нестойким в обоих направлениях по умолчанию.
Свойства текста front-sticky и rear-nonsticky, при использовании, имеют приоритет над значением nonstickiness, указанным в text-property-default-nonsticky.
Вот функции, которые вставляют текст с наследованием свойств:
Вставляет строки strings, как функция insert, но наследует любые стойкие свойства из прилегающего текста.
Вставляет строки strings, как функция insert-before-markers, но наследует любые стойкие свойства из прилегающего текста.
См. Вставка текста, для обычных функций вставки, которые не наследуют.