Spec-Zone.ru › Elisp

Вставка из кольца уничтожения

Вставка из кольца уничтожения означает вставку текста из кольца уничтожения, но текст вставляется не вслепую. Команда 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

Spec-Zone.ru

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