defvarによる変数の初期化 ¶copy-region-as-kill 関数は Emacs Lisp で記述されています。その中の
2 つの関数 kill-append と kill-new は、バッファ内の領域をコピーし、kill-ring という変数に保存します。この節では、defvar 特殊形式を用いて kill-ring
変数がどのように作成され、初期化されるかについて説明します。
(改めて指摘しておくが、kill-ringという用語は不適切である。バッファから切り出されたテキストは復元可能であり、それは死体の輪ではなく、蘇生可能なテキストの輪なのである。)
Emacs Lispでは、defvarという特殊フォームを用いてkill-ringのような変数を作成し、初期値を設定します。この名称は「define
variable」に由来しています。
defvar 特殊形式は、変数の値を設定するという点で setq と似ています。setq
とは異なる点が3つあります。第一に、変数を「特殊」としてマークするため、lexical-binding が t
である場合でも、常に動的にバインドされます(let
による変数のバインド方法 を参照)。第二に、変数にまだ値が設定されていない場合にのみ、変数の値を設定します。変数にすでに値がある場合、defvar は既存の値を上書きしません。第三に、defvar にはドキュメント文字列があります。
(ユーザーがカスタマイズする変数向けに設計された関連マクロ defcustom があります。こちらは
defvar よりも多くの機能を備えています。(defcustom による変数の設定
を参照してください。)