バッファからテキストが切り出されると、リストに格納されます。連続するテキストは順次リストに格納されるため、リストは次のようになる場合があります:
("a piece of text" "previous piece")
関数 cons
を使うと、テキスト(専門用語でいう「アトム」)と既存のリストから、次のように新しいリストを作成できます。
(cons "another piece"
'("a piece of text" "previous piece"))
この式を評価すると、エコー領域に3つの要素からなるリストが表示されます:
("another piece" "a piece of text" "previous piece")
car と nthcdr
関数を使えば、任意のテキストを取得できます。例えば、以下のコードでは、nthcdr 1
… は最初の項目を除いたリストを返し、car
はその残りのリストの最初の要素――つまり元のリストの2番目の要素――を返します:
(car (nthcdr 1 '("another piece"
"a piece of text"
"previous piece")))
⇒ "a piece of text"
もちろん、Emacsの実際の機能はこれよりも複雑です。テキストの切り取りや取得を行うコードは、リストのどの要素(1番目、2番目、3番目など)を意図しているのかをEmacsが判別できるように記述する必要があります。さらに、リストの末尾に達した際、Emacsは何も返さず、リストの最初の要素を返すべきです。
テキストの断片を保持するリストは、キルリングと呼ばれます。本章では、まずzap-to-char関数の仕組みを辿ることで、キルリングの説明とその利用方法へとつなげていきます。この関数は、キルリングを操作する関数を呼び出す関数を、さらに呼び出すという構造になっています。つまり、山に到達する前に、まずは山麓を登るというわけです。
続く章では、バッファから切り出されたテキストをどのように復元するかについて説明します。テキストのヤンクを参照してください。