変数 kill-ring
には、キルリングの内容が文字列のリストとして格納されています。直近のキルは常にリストの先頭に位置します。
kill-ring-yank-pointer 変数はキルリングリスト内のリンクを指しており、その
CAR が次にヤンクするテキストとなります。これをリングの先頭を特定するものと呼びます。kill-ring-yank-pointer を別のリンクに移動させることを キルリングの回転
と呼びます。ヤンクポインタを移動させる関数が、リストの末尾から先頭へ、あるいはその逆へと循環するため、キルリングを「リング」と呼びます。キルリングの回転は仮想的なものであり、kill-ring の値を変更することはありません。
kill-ring と kill-ring-yank-pointer はいずれも、通常はリストを値とする Lisp 変数です。kill-ring-yank-pointer の名称にある「ポインタ」という言葉は、この変数の目的が、次の
yank コマンドで使用するためにリストの1つの要素を特定することにあることを示しています。
kill-ring-yank-pointer
の値は、常にキルリングリスト内のリンクのいずれかに対する eq
となります。これが指し示す要素は、そのリンクの CAR
です。キルリングを変更するキルコマンドは、この変数を kill-ring
の値に設定します。これにより、リングが回転し、新たにキルされたテキストが先頭に来るようになります。
以下は、変数 kill-ring-yank-pointer がキルリングの2番目のエントリ
("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 の値の末尾であり、その CAR は
C-y がヤンクすべきキル文字列となります。
この変数の値は、末尾で要素が破棄されるまでにキルリングが拡大しうる最大長です。kill-ring-max のデフォルト値は 120 です。