GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Internals-of-Kill-Ring.html ・ emacs-doc.conao3.com

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 の名称にある「ポインタ」という言葉は、この変数の目的が、次の 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

この変数には、削除されたテキストシーケンスのリストが、直近に削除されたものから順に格納されています。

変数: kill-ring-yank-pointer

この変数の値は、キルリングのどの要素がヤンク対象として先頭にあるかを示します。より正確には、この値は kill-ring の値の末尾であり、その CAR は C-y がヤンクすべきキル文字列となります。

ユーザーオプション: kill-ring-max

この変数の値は、末尾で要素が破棄されるまでにキルリングが拡大しうる最大長です。kill-ring-max のデフォルト値は 120 です。