33.8.6 Внутреннее устройство кольца обрезки

Переменная kill-ring содержит содержимое кольца обрезки в виде списка строк. Самая недавняя обрезка всегда находится в начале списка.

Переменная kill-ring-yank-pointer указывает на ссылку в списке кольца обрезки, CAR которой является текст, который нужно вставить следующим. Мы говорим, что она определяет начало кольца. Перемещение kill-ring-yank-pointer на другую ссылку называется вращением кольца обрезки. Мы называем кольцо обрезки «кольцом», потому что функции, перемещающие указатель вставки, циклически переходят от конца списка к началу или наоборот. Вращение кольца обрезки является виртуальным; оно не изменяет значение kill-ring.

И kill-ring, и kill-ring-yank-pointer являются переменными Lisp, значения которых обычно являются списками. Слово «указатель» в названии kill-ring-yank-pointer указывает на то, что назначение этой переменной — идентифицировать один элемент списка для использования следующей командой вставки.

Значение kill-ring-yank-pointer всегда равно eq одной из ссылок в списке кольца обрезки. Элемент, который она идентифицирует, является CAR этой ссылки. Команды обрезки, которые изменяют кольцо обрезки, также устанавливают эту переменную в значение kill-ring. Эффект заключается в вращении кольца таким образом, чтобы только что обрезанный текст оказался в начале.

Вот диаграмма, показывающая, как переменная kill-ring-yank-pointer указывает на вторую запись в кольце обрезки ("some text" "a different piece of text" "yet older text").

kill-ring                  ---- kill-ring-yank-pointer
  |                       |
  |                       v
  |     --- ---          --- ---      --- ---
   --> |   |   |------> |   |   |--> |   |   |--> nil
        --- ---          --- ---      --- ---
         |                |            |
         |                |            |
         |                |             -->"yet older text"
         |                |
         |                 --> "a different piece of text"
         |
          --> "some text"

Такое состояние может возникнуть после C-y (yank), немедленно за которым следует M-y (yank-pop).

Переменная: kill-ring

Эта переменная содержит список обрезанных последовательностей текста, самая недавняя в начале.

Переменная: kill-ring-yank-pointer

Значение этой переменной указывает, какой элемент кольца обрезки находится в начале кольца для вставки. Точнее, значение является хвостом значения kill-ring, и его CAR — это строка обрезки, которую следует вставить с помощью C-y.

Пользовательский параметр: kill-ring-max

Значение этой переменной — максимальная длина, до которой может вырасти кольцо обрезки, прежде чем элементы будут удалены в конце. Значение по умолчанию для kill-ring-max равно 120.