В этом разделе описываются высокоуровневые команды для yank, которые
предназначены в первую очередь для пользователя, но также полезны в программах Lisp.
Обе команды yank и yank-pop учитывают
переменную yank-excluded-properties и свойство текста
yank-handler (см. Yanking).
Эта команда вставляет перед точкой текст, находящийся в начале
буфера обмена (kill ring). Она устанавливает метку в начале этого текста,
используя push-mark (см. The Mark),
и помещает точку в конец.
Если arg является списком, отличным от nil (что
происходит интерактивно, когда пользователь вводит C-u без
цифр), то yank вставляет текст, как описано выше, но
помещает точку перед вставленным текстом и устанавливает метку после него.
Если arg является числом, то yank вставляет
arg-й
недавно удаленный текст — arg-й элемент списка буфера
обмена, подсчитанный циклически от начала, который считается первым элементом
для этой цели.
yank не изменяет содержимое буфера обмена, если только
не используется текст, предоставленный другой программой, в этом случае он
добавляет этот текст в буфер обмена. Однако, если arg
является целым числом, отличным от одного, он поворачивает буфер обмена,
чтобы поместить в начало вставленную строку.
yank возвращает nil.
При вызове сразу после yank или другой команды
yank-pop эта команда заменяет только что вставленную запись из
буфера обмена другой записью из буфера обмена. Когда эта команда вызывается
таким образом, регион содержит текст, который был только что вставлен другой
командой yank. yank-pop удаляет этот текст и вставляет
в его место другой фрагмент удаленного текста. Он не добавляет удаленный текст
в буфер обмена, поскольку он уже где-то находится в буфере обмена. Однако он
поворачивает буфер обмена, чтобы поместить недавно вставленную строку в
начало.
Если arg равен nil, то заменяющий текст — это
предыдущий элемент буфера обмена. Если arg является
числом, замена — это arg-й предыдущий удаленный фрагмент.
Если arg отрицателен, заменой является более недавний
удаленный фрагмент.
Последовательность удалений в буфере обмена циклически замыкается, поэтому,
если yank-pop вызывается многократно и достигает самого
старого удаленного фрагмента, то следующий за ним — самый новый, а тот, что
перед самым новым — самый старый.
Эту команду также можно вызвать после команды, которая не является командой yank. В этом случае она запрашивает в minibuffer запись буфера обмена с автодополнением и использует элементы буфера обмена в качестве истории minibuffer (см. Minibuffer History). Это позволяет пользователю интерактивно выбрать одно из ранее удаленных фрагментов, записанных в буфер обмена.
Возвращаемое значение всегда nil.
Если эта переменная не равна nil, функция yank-pop использует ее значение вместо delete-region
для удаления текста, вставленного предыдущей командой yank или
yank-pop. Значение должно быть функцией с двумя аргументами:
началом и концом текущего региона.
Функция insert-for-yank автоматически устанавливает эту
переменную в соответствии с элементом undo свойства
yank-handler, если таковое имеется.