defvar
The copy-region-as-kill
function is written in Emacs Lisp. Two
functions within it, kill-append
and kill-new
, copy a
region in a buffer and save it in a variable called the
kill-ring
. This section describes how the kill-ring
variable is created and initialized using the defvar
special
form.
(Again we note that the term kill-ring
is a misnomer. The text
that is clipped out of the buffer can be brought back; it is not a ring
of corpses, but a ring of resurrectable text.)
In Emacs Lisp, a variable such as the kill-ring
is created and
given an initial value by using the defvar
special form. The
name comes from “define variable”.
The defvar
special form is similar to setq
in that it
sets the value of a variable. It is unlike setq
in three ways:
first, it marks the variable as “special” so that it is always
dynamically bound, even when lexical-binding
is t
(see How let
Binds Variables). Second, it only sets the value of
the variable if the variable does not already have a value. If the
variable already has a value, defvar
does not override the
existing value. Third, defvar
has a documentation string.
(There is a related macro, defcustom
, designed for variables
that people customize. It has more features than defvar
.
(See Setting Variables with defcustom
.)