Spec-Zone.ru › Elisp

Внутреннее устройство кольцевого буфера убитых фрагментов

Переменная 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

Spec-Zone.ru

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