前: Low-Level Kill Ring, 上: The Kill Ring
変数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の値は、キルリングリストの
1つの項目とつねにeqです。
これが識別する項目は、その項目のcarです。
キルリングを変更するキルコマンドも、
kill-ringの値をこの変数の値とします。
その効果は、新たにキルされたテキストが先頭にくるように
リングを回転することです。
キルリング("some text" "a different piece of text" "yet older text")の
第2項目を変数kill-ring-yank-pointerが指しているようすをつぎに示します。
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)を使うと
この状態になります。