Previous: Low-Level Kill Ring, Up: The Kill Ring


31.8.5 キルリングの内部

変数kill-ringは、文字列のリストの形でキルリングの内容を保持します。 もっとも最近のキルがつねにリストの先頭にあります。

変数kill-ring-yank-pointerは、 carがつぎにヤンクすべきテキストであるような キルリングリストの項目を指しています。 この変数がリングの『先頭』を識別するといいます。 kill-ring-yank-pointerを別の項目へ動かすことを キルリングを回転すると呼びます。 ヤンクポインタを動かす関数は、 リストの末尾からリストの先頭へ折り返しその逆も行うので、 キルリングを『リング』と呼ぶのです。 リングの回転は仮想的なものであり、 kill-ringの値は変更しません。

kill-ringkill-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-yyank)の直後にM-yyank-pop)を使うと この状態になります。

— Variable: kill-ring

この変数は、もっとも最近にキルされたものを最初にして キルされたテキストを順に並べたリストを保持する。

— Variable: kill-ring-yank-pointer

この変数の値は、キルリングのどの要素が ヤンクするためのリングの『先頭』であるかを表す。 より正確には、その値はkill-ringのリストの一部であり、 そのcarC-yがヤンクするキルされた文字列である。

— User Option: kill-ring-max

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