Внутреннее устройство кольцевого буфера убитых фрагментов
Переменная 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 всегда указывает на один из элементов в списке кольцевого буфера. Элемент, который он идентифицирует, является 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равно 60.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Internals-of-Kill-Ring.html