Вставка из кольца уничтожения
Вставка из кольца уничтожения означает вставку текста из кольца уничтожения, но текст вставляется не вслепую. Команда yank и связанные с ней команды используют insert-for-yank для специальной обработки текста перед его вставкой.
- Функция: insert-for-yank string
-
Эта функция работает подобно
insert, но перед вставкой результата в текущий буфер обрабатывает текст в string в соответствии со свойством текстаyank-handler, а также переменнымиyank-handled-propertiesиyank-excluded-properties(см. ниже).Перед вставкой string будет обработана функцией
yank-transform-functions(см. ниже).
- Функция: insert-buffer-substring-as-yank buf &optional start end
Эта функция похожа на
insert-buffer-substring, но обрабатывает текст в соответствии сyank-handled-propertiesиyank-excluded-properties. (Она не обрабатывает свойствоyank-handler, которое обычно не встречается в тексте буфера.)
Если задать свойство текста yank-handler для всей строки или ее части, это изменит способ, которым insert-for-yank вставляет строку. Если разные части строки имеют разные значения yank-handler (сравнение выполняется с помощью eq), каждая подстрока обрабатывается отдельно. Значение свойства должно представлять собой список из одного—четырех элементов в следующем формате (элементы после первого можно опустить):
(function param noexclude undo)
Назначение элементов:
- function
-
Если function не равно
nil, эта функция вызывается вместоinsertдля вставки строки и получает один аргумент — вставляемую строку. - param
-
Если param задан и не равен
nil, он заменяет string (или обрабатываемую подстроку string) в качестве объекта, передаваемого функции function (илиinsert). Например, если function — этоyank-rectangle, param должен представлять собой список строк, которые нужно вставить в виде прямоугольника. - noexclude
-
Если noexclude задан и не равен
nil, это отключает обычное действиеyank-handled-propertiesиyank-excluded-propertiesдля вставляемой строки. - undo
Если undo задан и не равен
nil, это функция, вызываемая командойyank-popдля отмены вставки текущего объекта. Она вызывается с двумя аргументами: началом и концом текущей области. function может задатьyank-undo-function, чтобы переопределить значение undo.
- Пользовательский параметр: yank-handled-properties
-
Эта переменная задает условия специальной обработки свойств текста для вставляемого текста. Она вступает в действие после вставки текста (обычным способом или с помощью свойства
yank-handler) и до вступления в силуyank-excluded-properties.Значение должно представлять собой ассоциативный список элементов
(prop . fun). Каждый элемент ассоциативного списка обрабатывается по порядку. Вставленный текст сканируется на предмет фрагментов текста со свойствами текстаeq, равными prop; для каждого такого фрагмента вызывается fun с тремя аргументами: значением свойства, а также начальной и конечной позициями текста.
- Пользовательский параметр: yank-excluded-properties
Значение этой переменной — список свойств, удаляемых из вставляемого текста. Значение по умолчанию содержит свойства, которые могут привести к нежелательным результатам, например заставить текст реагировать на мышь или задать привязки клавиш. Переменная вступает в действие после
yank-handled-properties.
- Переменная: yank-transform-functions
-
Эта переменная представляет собой список функций. Каждая функция вызывается по порядку и получает в качестве аргумента вставляемую строку, а затем должна вернуть (возможно, преобразованную) строку. Эту переменную можно задать глобально, но ее также можно использовать для создания новых команд, являющихся вариантами
yank. Например, чтобы создать команду, работающую подобноyank, но очищающую пробельные символы перед вставкой, можно написать следующее:(defun yank-with-clean-whitespace () (interactive) (let ((yank-transform-functions '(string-clean-whitespace))) (call-interactively #'yank)))
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Yanking.html