50.2 Variables

A variable is a Lisp symbol which has a value. The symbol’s name is also called the variable name. A variable name can contain any characters that can appear in a file, but most variable names consist of ordinary words separated by hyphens.

The name of the variable serves as a compact description of its role. Most variables also have a documentation string, which describes what the variable’s purpose is, what kind of value it should have, and how the value will be used. You can view this documentation using the help command C-h v (describe-variable). See Examining and Setting Variables.

Emacs uses many Lisp variables for internal record keeping, but the most interesting variables for a non-programmer user are those meant for users to change—these are called customizable variables or user options (see Easy Customization Interface). In the following sections, we will describe other aspects of Emacs variables, such as how to set them outside Customize.

Emacs Lisp allows any variable (with a few exceptions) to have any kind of value. However, many variables are meaningful only if assigned values of a certain type. For example, only numbers are meaningful values for kill-ring-max, which specifies the maximum length of the kill ring (see Yanking Earlier Kills); if you give kill-ring-max a string value, commands such as C-y (yank) will signal an error. On the other hand, some variables don’t care about type; for instance, if a variable has one effect for nil values and another effect for non-nil values, then any value that is not the symbol nil induces the second effect, regardless of its type (by convention, we usually use the value t—a symbol which stands for “true”—to specify a non-nil value). If you set a variable using the customization buffer, you need not worry about giving it an invalid type: the customization buffer usually only allows you to enter meaningful values. When in doubt, use C-h v (describe-variable) to check the variable’s documentation string to see what kind of value it expects (see Examining and Setting Variables).