8.5 Initializing a Variable with 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.)