(Defining Minor Modes): Fix previous change.
[bpt/emacs.git] / lispref / variables.texi
CommitLineData
e6512bcf
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
651f374c 3@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2002,
ceb4c4d3 4@c 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
e6512bcf
RS
5@c See the file elisp.texi for copying conditions.
6@setfilename ../info/variables
7@node Variables, Functions, Control Structures, Top
8@chapter Variables
9@cindex variable
10
11 A @dfn{variable} is a name used in a program to stand for a value.
12Nearly all programming languages have variables of some sort. In the
13text of a Lisp program, variables are written using the syntax for
14symbols.
15
16 In Lisp, unlike most programming languages, programs are represented
17primarily as Lisp objects and only secondarily as text. The Lisp
18objects used for variables are symbols: the symbol name is the variable
19name, and the variable's value is stored in the value cell of the
20symbol. The use of a symbol as a variable is independent of its use as
21a function name. @xref{Symbol Components}.
22
23 The Lisp objects that constitute a Lisp program determine the textual
f57ddf67 24form of the program---it is simply the read syntax for those Lisp
e6512bcf
RS
25objects. This is why, for example, a variable in a textual Lisp program
26is written using the read syntax for the symbol that represents the
27variable.
28
29@menu
30* Global Variables:: Variable values that exist permanently, everywhere.
31* Constant Variables:: Certain "variables" have values that never change.
32* Local Variables:: Variable values that exist only temporarily.
33* Void Variables:: Symbols that lack values.
34* Defining Variables:: A definition says a symbol is used as a variable.
b50c9214
RS
35* Tips for Defining:: Things you should think about when you
36 define a variable.
e6512bcf
RS
37* Accessing Variables:: Examining values of variables whose names
38 are known only at run time.
39* Setting Variables:: Storing new values in variables.
40* Variable Scoping:: How Lisp chooses among local and global values.
41* Buffer-Local Variables:: Variable values in effect only in one buffer.
969fe9b5
RS
42* Frame-Local Variables:: Variable values in effect only in one frame.
43* Future Local Variables:: New kinds of local values we might add some day.
b50c9214 44* File Local Variables:: Handling local variable lists in files.
0b2892c6 45* Variable Aliases:: Variables that are aliases for other variables.
74ab3aa3
LT
46* Variables with Restricted Values:: Non-constant variables whose value can
47 @emph{not} be an arbitrary Lisp object.
e6512bcf
RS
48@end menu
49
50@node Global Variables
51@section Global Variables
52@cindex global variable
53
54 The simplest way to use a variable is @dfn{globally}. This means that
55the variable has just one value at a time, and this value is in effect
56(at least for the moment) throughout the Lisp system. The value remains
57in effect until you specify a new one. When a new value replaces the
58old one, no trace of the old value remains in the variable.
59
60 You specify a value for a symbol with @code{setq}. For example,
61
62@example
63(setq x '(a b))
64@end example
65
66@noindent
67gives the variable @code{x} the value @code{(a b)}. Note that
68@code{setq} does not evaluate its first argument, the name of the
69variable, but it does evaluate the second argument, the new value.
70
71 Once the variable has a value, you can refer to it by using the symbol
72by itself as an expression. Thus,
73
74@example
75@group
76x @result{} (a b)
77@end group
78@end example
79
80@noindent
81assuming the @code{setq} form shown above has already been executed.
82
969fe9b5
RS
83 If you do set the same variable again, the new value replaces the old
84one:
e6512bcf
RS
85
86@example
87@group
88x
89 @result{} (a b)
90@end group
91@group
92(setq x 4)
93 @result{} 4
94@end group
95@group
96x
97 @result{} 4
98@end group
99@end example
100
101@node Constant Variables
8241495d 102@section Variables that Never Change
e6512bcf
RS
103@vindex nil
104@vindex t
105@kindex setting-constant
95ed62c7 106@cindex keyword symbol
e6512bcf 107
969fe9b5
RS
108 In Emacs Lisp, certain symbols normally evaluate to themselves. These
109include @code{nil} and @code{t}, as well as any symbol whose name starts
95ed62c7
GM
110with @samp{:} (these are called @dfn{keywords}). These symbols cannot
111be rebound, nor can their values be changed. Any attempt to set or bind
112@code{nil} or @code{t} signals a @code{setting-constant} error. The
113same is true for a keyword (a symbol whose name starts with @samp{:}),
114if it is interned in the standard obarray, except that setting such a
115symbol to itself is not an error.
e6512bcf
RS
116
117@example
118@group
119nil @equiv{} 'nil
120 @result{} nil
121@end group
122@group
123(setq nil 500)
124@error{} Attempt to set constant symbol: nil
125@end group
126@end example
127
e88399c8 128@defun keywordp object
e88399c8
DL
129function returns @code{t} if @var{object} is a symbol whose name
130starts with @samp{:}, interned in the standard obarray, and returns
131@code{nil} otherwise.
132@end defun
133
e6512bcf
RS
134@node Local Variables
135@section Local Variables
136@cindex binding local variables
137@cindex local variables
138@cindex local binding
139@cindex global binding
140
141 Global variables have values that last until explicitly superseded
142with new values. Sometimes it is useful to create variable values that
969fe9b5 143exist temporarily---only until a certain part of the program finishes.
e6512bcf
RS
144These values are called @dfn{local}, and the variables so used are
145called @dfn{local variables}.
146
147 For example, when a function is called, its argument variables receive
148new local values that last until the function exits. The @code{let}
149special form explicitly establishes new local values for specified
150variables; these last until exit from the @code{let} form.
151
152@cindex shadowing of variables
153 Establishing a local value saves away the previous value (or lack of
154one) of the variable. When the life span of the local value is over,
155the previous value is restored. In the mean time, we say that the
156previous value is @dfn{shadowed} and @dfn{not visible}. Both global and
157local values may be shadowed (@pxref{Scope}).
158
159 If you set a variable (such as with @code{setq}) while it is local,
160this replaces the local value; it does not alter the global value, or
969fe9b5 161previous local values, that are shadowed. To model this behavior, we
e6512bcf
RS
162speak of a @dfn{local binding} of the variable as well as a local value.
163
164 The local binding is a conceptual place that holds a local value.
165Entry to a function, or a special form such as @code{let}, creates the
166local binding; exit from the function or from the @code{let} removes the
167local binding. As long as the local binding lasts, the variable's value
168is stored within it. Use of @code{setq} or @code{set} while there is a
169local binding stores a different value into the local binding; it does
170not create a new binding.
171
172 We also speak of the @dfn{global binding}, which is where
173(conceptually) the global value is kept.
174
175@cindex current binding
176 A variable can have more than one local binding at a time (for
177example, if there are nested @code{let} forms that bind it). In such a
178case, the most recently created local binding that still exists is the
969fe9b5
RS
179@dfn{current binding} of the variable. (This rule is called
180@dfn{dynamic scoping}; see @ref{Variable Scoping}.) If there are no
181local bindings, the variable's global binding is its current binding.
182We sometimes call the current binding the @dfn{most-local existing
183binding}, for emphasis. Ordinary evaluation of a symbol always returns
184the value of its current binding.
e6512bcf
RS
185
186 The special forms @code{let} and @code{let*} exist to create
187local bindings.
188
189@defspec let (bindings@dots{}) forms@dots{}
f57ddf67 190This special form binds variables according to @var{bindings} and then
e6512bcf
RS
191evaluates all of the @var{forms} in textual order. The @code{let}-form
192returns the value of the last form in @var{forms}.
193
194Each of the @var{bindings} is either @w{(i) a} symbol, in which case
195that symbol is bound to @code{nil}; or @w{(ii) a} list of the form
196@code{(@var{symbol} @var{value-form})}, in which case @var{symbol} is
197bound to the result of evaluating @var{value-form}. If @var{value-form}
198is omitted, @code{nil} is used.
199
200All of the @var{value-form}s in @var{bindings} are evaluated in the
f9f59935 201order they appear and @emph{before} binding any of the symbols to them.
5c646a2d
RS
202Here is an example of this: @code{z} is bound to the old value of
203@code{y}, which is 2, not the new value of @code{y}, which is 1.
e6512bcf
RS
204
205@example
206@group
5c646a2d 207(setq y 2)
e6512bcf
RS
208 @result{} 2
209@end group
210@group
5c646a2d
RS
211(let ((y 1)
212 (z y))
213 (list y z))
e6512bcf
RS
214 @result{} (1 2)
215@end group
216@end example
217@end defspec
218
219@defspec let* (bindings@dots{}) forms@dots{}
220This special form is like @code{let}, but it binds each variable right
221after computing its local value, before computing the local value for
222the next variable. Therefore, an expression in @var{bindings} can
223reasonably refer to the preceding symbols bound in this @code{let*}
224form. Compare the following example with the example above for
225@code{let}.
226
227@example
228@group
5c646a2d 229(setq y 2)
e6512bcf
RS
230 @result{} 2
231@end group
232@group
5c646a2d
RS
233(let* ((y 1)
234 (z y)) ; @r{Use the just-established value of @code{y}.}
235 (list y z))
e6512bcf
RS
236 @result{} (1 1)
237@end group
238@end example
239@end defspec
240
f57ddf67 241 Here is a complete list of the other facilities that create local
e6512bcf
RS
242bindings:
243
244@itemize @bullet
245@item
246Function calls (@pxref{Functions}).
247
248@item
249Macro calls (@pxref{Macros}).
250
251@item
252@code{condition-case} (@pxref{Errors}).
253@end itemize
254
bfe721d1 255 Variables can also have buffer-local bindings (@pxref{Buffer-Local
a9f0a989
RS
256Variables}) and frame-local bindings (@pxref{Frame-Local Variables}); a
257few variables have terminal-local bindings (@pxref{Multiple Displays}).
258These kinds of bindings work somewhat like ordinary local bindings, but
259they are localized depending on ``where'' you are in Emacs, rather than
260localized in time.
bfe721d1 261
e6512bcf 262@defvar max-specpdl-size
7baeca0c 263@anchor{Definition of max-specpdl-size}
e6512bcf
RS
264@cindex variable limit error
265@cindex evaluation error
266@cindex infinite recursion
a9f0a989 267This variable defines the limit on the total number of local variable
74ab3aa3
LT
268bindings and @code{unwind-protect} cleanups (@pxref{Cleanups,,
269Cleaning Up from Nonlocal Exits}) that are allowed before signaling an
270error (with data @code{"Variable binding depth exceeds
271max-specpdl-size"}).
e6512bcf 272
a9f0a989 273This limit, with the associated error when it is exceeded, is one way
e6512bcf 274that Lisp avoids infinite recursion on an ill-defined function.
a9f0a989 275@code{max-lisp-eval-depth} provides another limit on depth of nesting.
74ab3aa3 276@xref{Definition of max-lisp-eval-depth,, Eval}.
a9f0a989 277
1e2b8ce5 278The default value is 1000. Entry to the Lisp debugger increases the
a9f0a989
RS
279value, if there is little room left, to make sure the debugger itself
280has room to execute.
e6512bcf
RS
281@end defvar
282
283@node Void Variables
284@section When a Variable is ``Void''
285@kindex void-variable
286@cindex void variable
287
288 If you have never given a symbol any value as a global variable, we
289say that that symbol's global value is @dfn{void}. In other words, the
290symbol's value cell does not have any Lisp object in it. If you try to
291evaluate the symbol, you get a @code{void-variable} error rather than
292a value.
293
294 Note that a value of @code{nil} is not the same as void. The symbol
295@code{nil} is a Lisp object and can be the value of a variable just as any
296other object can be; but it is @emph{a value}. A void variable does not
297have any value.
298
299 After you have given a variable a value, you can make it void once more
300using @code{makunbound}.
301
302@defun makunbound symbol
f9f59935 303This function makes the current variable binding of @var{symbol} void.
e6512bcf 304Subsequent attempts to use this symbol's value as a variable will signal
f9f59935 305the error @code{void-variable}, unless and until you set it again.
e6512bcf
RS
306
307@code{makunbound} returns @var{symbol}.
308
309@example
310@group
969fe9b5 311(makunbound 'x) ; @r{Make the global value of @code{x} void.}
e6512bcf
RS
312 @result{} x
313@end group
314@group
315x
316@error{} Symbol's value as variable is void: x
317@end group
318@end example
319
320If @var{symbol} is locally bound, @code{makunbound} affects the most
321local existing binding. This is the only way a symbol can have a void
322local binding, since all the constructs that create local bindings
323create them with values. In this case, the voidness lasts at most as
324long as the binding does; when the binding is removed due to exit from
969fe9b5
RS
325the construct that made it, the previous local or global binding is
326reexposed as usual, and the variable is no longer void unless the newly
327reexposed binding was void all along.
e6512bcf
RS
328
329@smallexample
330@group
331(setq x 1) ; @r{Put a value in the global binding.}
332 @result{} 1
333(let ((x 2)) ; @r{Locally bind it.}
334 (makunbound 'x) ; @r{Void the local binding.}
335 x)
336@error{} Symbol's value as variable is void: x
337@end group
338@group
339x ; @r{The global binding is unchanged.}
340 @result{} 1
341
342(let ((x 2)) ; @r{Locally bind it.}
343 (let ((x 3)) ; @r{And again.}
344 (makunbound 'x) ; @r{Void the innermost-local binding.}
345 x)) ; @r{And refer: it's void.}
346@error{} Symbol's value as variable is void: x
347@end group
348
349@group
350(let ((x 2))
351 (let ((x 3))
352 (makunbound 'x)) ; @r{Void inner binding, then remove it.}
353 x) ; @r{Now outer @code{let} binding is visible.}
354 @result{} 2
355@end group
356@end smallexample
357@end defun
358
359 A variable that has been made void with @code{makunbound} is
360indistinguishable from one that has never received a value and has
361always been void.
362
363 You can use the function @code{boundp} to test whether a variable is
364currently void.
365
366@defun boundp variable
367@code{boundp} returns @code{t} if @var{variable} (a symbol) is not void;
368more precisely, if its current binding is not void. It returns
369@code{nil} otherwise.
370
371@smallexample
372@group
373(boundp 'abracadabra) ; @r{Starts out void.}
374 @result{} nil
375@end group
376@group
377(let ((abracadabra 5)) ; @r{Locally bind it.}
378 (boundp 'abracadabra))
379 @result{} t
380@end group
381@group
382(boundp 'abracadabra) ; @r{Still globally void.}
383 @result{} nil
384@end group
385@group
386(setq abracadabra 5) ; @r{Make it globally nonvoid.}
387 @result{} 5
388@end group
389@group
390(boundp 'abracadabra)
391 @result{} t
392@end group
393@end smallexample
394@end defun
395
396@node Defining Variables
397@section Defining Global Variables
f57ddf67 398@cindex variable definition
e6512bcf
RS
399
400 You may announce your intention to use a symbol as a global variable
f57ddf67
RS
401with a @dfn{variable definition}: a special form, either @code{defconst}
402or @code{defvar}.
e6512bcf
RS
403
404 In Emacs Lisp, definitions serve three purposes. First, they inform
405people who read the code that certain symbols are @emph{intended} to be
406used a certain way (as variables). Second, they inform the Lisp system
407of these things, supplying a value and documentation. Third, they
408provide information to utilities such as @code{etags} and
409@code{make-docfile}, which create data bases of the functions and
410variables in a program.
411
412 The difference between @code{defconst} and @code{defvar} is primarily
f9f59935
RS
413a matter of intent, serving to inform human readers of whether the value
414should ever change. Emacs Lisp does not restrict the ways in which a
415variable can be used based on @code{defconst} or @code{defvar}
f57ddf67 416declarations. However, it does make a difference for initialization:
e6512bcf
RS
417@code{defconst} unconditionally initializes the variable, while
418@code{defvar} initializes it only if it is void.
419
f9f59935 420@ignore
e6512bcf
RS
421 One would expect user option variables to be defined with
422@code{defconst}, since programs do not change them. Unfortunately, this
423has bad results if the definition is in a library that is not preloaded:
424@code{defconst} would override any prior value when the library is
425loaded. Users would like to be able to set user options in their init
426files, and override the default values given in the definitions. For
427this reason, user options must be defined with @code{defvar}.
f9f59935 428@end ignore
e6512bcf
RS
429
430@defspec defvar symbol [value [doc-string]]
f9f59935
RS
431This special form defines @var{symbol} as a variable and can also
432initialize and document it. The definition informs a person reading
433your code that @var{symbol} is used as a variable that might be set or
434changed. Note that @var{symbol} is not evaluated; the symbol to be
e6512bcf
RS
435defined must appear explicitly in the @code{defvar}.
436
f9f59935
RS
437If @var{symbol} is void and @var{value} is specified, @code{defvar}
438evaluates it and sets @var{symbol} to the result. But if @var{symbol}
439already has a value (i.e., it is not void), @var{value} is not even
440evaluated, and @var{symbol}'s value remains unchanged. If @var{value}
441is omitted, the value of @var{symbol} is not changed in any case.
e6512bcf 442
a9f0a989
RS
443If @var{symbol} has a buffer-local binding in the current buffer,
444@code{defvar} operates on the default value, which is buffer-independent,
445not the current (buffer-local) binding. It sets the default value if
446the default value is void. @xref{Buffer-Local Variables}.
447
bfe721d1
KH
448When you evaluate a top-level @code{defvar} form with @kbd{C-M-x} in
449Emacs Lisp mode (@code{eval-defun}), a special feature of
a9f0a989
RS
450@code{eval-defun} arranges to set the variable unconditionally, without
451testing whether its value is void.
e6512bcf
RS
452
453If the @var{doc-string} argument appears, it specifies the documentation
454for the variable. (This opportunity to specify documentation is one of
455the main benefits of defining the variable.) The documentation is
456stored in the symbol's @code{variable-documentation} property. The
457Emacs help functions (@pxref{Documentation}) look for this property.
458
2a2048f2
RS
459If the variable is a user option that users would want to set
460interactively, you should use @samp{*} as the first character of
461@var{doc-string}. This lets users set the variable conveniently using
462the @code{set-variable} command. Note that you should nearly always
463use @code{defcustom} instead of @code{defvar} to define these
464variables, so that users can use @kbd{M-x customize} and related
465commands to set them. @xref{Customization}.
e6512bcf 466
f9f59935
RS
467Here are some examples. This form defines @code{foo} but does not
468initialize it:
e6512bcf
RS
469
470@example
471@group
472(defvar foo)
473 @result{} foo
474@end group
475@end example
476
f9f59935
RS
477This example initializes the value of @code{bar} to @code{23}, and gives
478it a documentation string:
e6512bcf
RS
479
480@example
481@group
482(defvar bar 23
483 "The normal weight of a bar.")
484 @result{} bar
485@end group
486@end example
487
488The following form changes the documentation string for @code{bar},
489making it a user option, but does not change the value, since @code{bar}
f9f59935
RS
490already has a value. (The addition @code{(1+ nil)} would get an error
491if it were evaluated, but since it is not evaluated, there is no error.)
e6512bcf
RS
492
493@example
494@group
f9f59935 495(defvar bar (1+ nil)
e6512bcf
RS
496 "*The normal weight of a bar.")
497 @result{} bar
498@end group
499@group
500bar
501 @result{} 23
502@end group
503@end example
504
505Here is an equivalent expression for the @code{defvar} special form:
506
507@example
508@group
509(defvar @var{symbol} @var{value} @var{doc-string})
510@equiv{}
511(progn
512 (if (not (boundp '@var{symbol}))
513 (setq @var{symbol} @var{value}))
25ef19c5
RS
514 (if '@var{doc-string}
515 (put '@var{symbol} 'variable-documentation '@var{doc-string}))
e6512bcf
RS
516 '@var{symbol})
517@end group
518@end example
519
520The @code{defvar} form returns @var{symbol}, but it is normally used
521at top level in a file where its value does not matter.
522@end defspec
523
f36e1798 524@defspec defconst symbol value [doc-string]
e6512bcf 525This special form defines @var{symbol} as a value and initializes it.
f9f59935
RS
526It informs a person reading your code that @var{symbol} has a standard
527global value, established here, that should not be changed by the user
528or by other programs. Note that @var{symbol} is not evaluated; the
e6512bcf
RS
529symbol to be defined must appear explicitly in the @code{defconst}.
530
f9f59935 531@code{defconst} always evaluates @var{value}, and sets the value of
f36e1798
LT
532@var{symbol} to the result. If @var{symbol} does have a buffer-local
533binding in the current buffer, @code{defconst} sets the default value,
534not the buffer-local value. (But you should not be making
535buffer-local bindings for a symbol that is defined with
a9f0a989 536@code{defconst}.)
e6512bcf
RS
537
538Here, @code{pi} is a constant that presumably ought not to be changed
539by anyone (attempts by the Indiana State Legislature notwithstanding).
540As the second form illustrates, however, this is only advisory.
541
542@example
543@group
544(defconst pi 3.1415 "Pi to five places.")
545 @result{} pi
546@end group
547@group
548(setq pi 3)
549 @result{} pi
550@end group
551@group
552pi
553 @result{} 3
554@end group
555@end example
556@end defspec
557
558@defun user-variable-p variable
559@cindex user option
f57ddf67 560This function returns @code{t} if @var{variable} is a user option---a
e6512bcf
RS
561variable intended to be set by the user for customization---and
562@code{nil} otherwise. (Variables other than user options exist for the
563internal purposes of Lisp programs, and users need not know about them.)
564
e88399c8
DL
565User option variables are distinguished from other variables either
566though being declared using @code{defcustom}@footnote{They may also be
567declared equivalently in @file{cus-start.el}.} or by the first character
568of their @code{variable-documentation} property. If the property exists
569and is a string, and its first character is @samp{*}, then the variable
9a6abc8e 570is a user option. Aliases of user options are also user options.
e6512bcf
RS
571@end defun
572
113613ea 573@kindex variable-interactive
e6512bcf 574 If a user option variable has a @code{variable-interactive} property,
bfe721d1
KH
575the @code{set-variable} command uses that value to control reading the
576new value for the variable. The property's value is used as if it were
8241495d
RS
577specified in @code{interactive} (@pxref{Using Interactive}). However,
578this feature is largely obsoleted by @code{defcustom}
579(@pxref{Customization}).
e6512bcf 580
b22f3a19 581 @strong{Warning:} If the @code{defconst} and @code{defvar} special
6fe50867
RS
582forms are used while the variable has a local binding (made with
583@code{let}, or a function argument), they set the local-binding's
584value; the top-level binding is not changed. This is not what you
585usually want. To prevent it, use these special forms at top level in
586a file, where normally no local binding is in effect, and make sure to
587load the file before making a local binding for the variable.
e6512bcf 588
aa9b77f6
RS
589@node Tips for Defining
590@section Tips for Defining Variables Robustly
591
b50c9214
RS
592 When you define a variable whose value is a function, or a list of
593functions, use a name that ends in @samp{-function} or
594@samp{-functions}, respectively.
595
596 There are several other variable name conventions;
597here is a complete list:
598
599@table @samp
600@item @dots{}-hook
601The variable is a normal hook (@pxref{Hooks}).
602
603@item @dots{}-function
604The value is a function.
605
606@item @dots{}-functions
607The value is a list of functions.
608
609@item @dots{}-form
610The value is a form (an expression).
611
80561aaa 612@item @dots{}-forms
b50c9214
RS
613The value is a list of forms (expressions).
614
615@item @dots{}-predicate
616The value is a predicate---a function of one argument that returns
617non-@code{nil} for ``good'' arguments and @code{nil} for ``bad''
618arguments.
619
620@item @dots{}-flag
621The value is significant only as to whether it is @code{nil} or not.
622
623@item @dots{}-program
624The value is a program name.
625
626@item @dots{}-command
627The value is a whole shell command.
628
1e9265dd 629@item @dots{}-switches
b50c9214
RS
630The value specifies options for a command.
631@end table
632
80561aaa 633 When you define a variable, always consider whether you should mark
b50c9214
RS
634it as ``risky''; see @ref{File Local Variables}.
635
aa9b77f6
RS
636 When defining and initializing a variable that holds a complicated
637value (such as a keymap with bindings in it), it's best to put the
638entire computation of the value into the @code{defvar}, like this:
639
640@example
641(defvar my-mode-map
642 (let ((map (make-sparse-keymap)))
f9f59935 643 (define-key map "\C-c\C-a" 'my-command)
aa9b77f6
RS
644 @dots{}
645 map)
646 @var{docstring})
647@end example
648
649@noindent
650This method has several benefits. First, if the user quits while
651loading the file, the variable is either still uninitialized or
969fe9b5 652initialized properly, never in-between. If it is still uninitialized,
aa9b77f6
RS
653reloading the file will initialize it properly. Second, reloading the
654file once the variable is initialized will not alter it; that is
655important if the user has run hooks to alter part of the contents (such
656as, to rebind keys). Third, evaluating the @code{defvar} form with
657@kbd{C-M-x} @emph{will} reinitialize the map completely.
658
659 Putting so much code in the @code{defvar} form has one disadvantage:
660it puts the documentation string far away from the line which names the
661variable. Here's a safe way to avoid that:
662
663@example
664(defvar my-mode-map nil
665 @var{docstring})
8241495d 666(unless my-mode-map
aa9b77f6 667 (let ((map (make-sparse-keymap)))
b548072f 668 (define-key map "\C-c\C-a" 'my-command)
aa9b77f6
RS
669 @dots{}
670 (setq my-mode-map map)))
671@end example
672
673@noindent
674This has all the same advantages as putting the initialization inside
675the @code{defvar}, except that you must type @kbd{C-M-x} twice, once on
676each form, if you do want to reinitialize the variable.
677
678 But be careful not to write the code like this:
679
680@example
681(defvar my-mode-map nil
682 @var{docstring})
8241495d 683(unless my-mode-map
aa9b77f6
RS
684 (setq my-mode-map (make-sparse-keymap))
685 (define-key my-mode-map "\C-c\C-a" 'my-command)
686 @dots{})
687@end example
688
689@noindent
969fe9b5
RS
690This code sets the variable, then alters it, but it does so in more than
691one step. If the user quits just after the @code{setq}, that leaves the
692variable neither correctly initialized nor void nor @code{nil}. Once
693that happens, reloading the file will not initialize the variable; it
694will remain incomplete.
aa9b77f6 695
e6512bcf
RS
696@node Accessing Variables
697@section Accessing Variable Values
698
699 The usual way to reference a variable is to write the symbol which
700names it (@pxref{Symbol Forms}). This requires you to specify the
701variable name when you write the program. Usually that is exactly what
702you want to do. Occasionally you need to choose at run time which
703variable to reference; then you can use @code{symbol-value}.
704
705@defun symbol-value symbol
706This function returns the value of @var{symbol}. This is the value in
707the innermost local binding of the symbol, or its global value if it
708has no local bindings.
709
710@example
711@group
712(setq abracadabra 5)
713 @result{} 5
714@end group
715@group
716(setq foo 9)
717 @result{} 9
718@end group
719
720@group
721;; @r{Here the symbol @code{abracadabra}}
722;; @r{is the symbol whose value is examined.}
723(let ((abracadabra 'foo))
724 (symbol-value 'abracadabra))
725 @result{} foo
726@end group
727
728@group
42995636 729;; @r{Here, the value of @code{abracadabra},}
e6512bcf
RS
730;; @r{which is @code{foo},}
731;; @r{is the symbol whose value is examined.}
732(let ((abracadabra 'foo))
733 (symbol-value abracadabra))
734 @result{} 9
735@end group
736
737@group
738(symbol-value 'abracadabra)
739 @result{} 5
740@end group
741@end example
742
969fe9b5
RS
743A @code{void-variable} error is signaled if the current binding of
744@var{symbol} is void.
e6512bcf
RS
745@end defun
746
747@node Setting Variables
748@section How to Alter a Variable Value
749
750 The usual way to change the value of a variable is with the special
751form @code{setq}. When you need to compute the choice of variable at
752run time, use the function @code{set}.
753
754@defspec setq [symbol form]@dots{}
755This special form is the most common method of changing a variable's
756value. Each @var{symbol} is given a new value, which is the result of
757evaluating the corresponding @var{form}. The most-local existing
758binding of the symbol is changed.
759
760@code{setq} does not evaluate @var{symbol}; it sets the symbol that you
761write. We say that this argument is @dfn{automatically quoted}. The
762@samp{q} in @code{setq} stands for ``quoted.''
763
764The value of the @code{setq} form is the value of the last @var{form}.
765
766@example
767@group
768(setq x (1+ 2))
769 @result{} 3
770@end group
771x ; @r{@code{x} now has a global value.}
772 @result{} 3
773@group
177c0ea7 774(let ((x 5))
e6512bcf
RS
775 (setq x 6) ; @r{The local binding of @code{x} is set.}
776 x)
777 @result{} 6
778@end group
779x ; @r{The global value is unchanged.}
780 @result{} 3
781@end example
782
783Note that the first @var{form} is evaluated, then the first
784@var{symbol} is set, then the second @var{form} is evaluated, then the
785second @var{symbol} is set, and so on:
786
787@example
788@group
789(setq x 10 ; @r{Notice that @code{x} is set before}
790 y (1+ x)) ; @r{the value of @code{y} is computed.}
177c0ea7 791 @result{} 11
e6512bcf
RS
792@end group
793@end example
794@end defspec
795
796@defun set symbol value
797This function sets @var{symbol}'s value to @var{value}, then returns
798@var{value}. Since @code{set} is a function, the expression written for
799@var{symbol} is evaluated to obtain the symbol to set.
800
801The most-local existing binding of the variable is the binding that is
f57ddf67 802set; shadowed bindings are not affected.
e6512bcf
RS
803
804@example
805@group
806(set one 1)
807@error{} Symbol's value as variable is void: one
808@end group
809@group
810(set 'one 1)
811 @result{} 1
812@end group
813@group
814(set 'two 'one)
815 @result{} one
816@end group
817@group
818(set two 2) ; @r{@code{two} evaluates to symbol @code{one}.}
819 @result{} 2
820@end group
821@group
822one ; @r{So it is @code{one} that was set.}
823 @result{} 2
824(let ((one 1)) ; @r{This binding of @code{one} is set,}
825 (set 'one 3) ; @r{not the global value.}
826 one)
827 @result{} 3
828@end group
829@group
830one
831 @result{} 2
832@end group
833@end example
834
f57ddf67
RS
835If @var{symbol} is not actually a symbol, a @code{wrong-type-argument}
836error is signaled.
837
838@example
839(set '(x y) 'z)
840@error{} Wrong type argument: symbolp, (x y)
841@end example
842
e6512bcf
RS
843Logically speaking, @code{set} is a more fundamental primitive than
844@code{setq}. Any use of @code{setq} can be trivially rewritten to use
845@code{set}; @code{setq} could even be defined as a macro, given the
846availability of @code{set}. However, @code{set} itself is rarely used;
f57ddf67
RS
847beginners hardly need to know about it. It is useful only for choosing
848at run time which variable to set. For example, the command
e6512bcf
RS
849@code{set-variable}, which reads a variable name from the user and then
850sets the variable, needs to use @code{set}.
851
852@cindex CL note---@code{set} local
853@quotation
f57ddf67 854@b{Common Lisp note:} In Common Lisp, @code{set} always changes the
f9f59935
RS
855symbol's ``special'' or dynamic value, ignoring any lexical bindings.
856In Emacs Lisp, all variables and all bindings are dynamic, so @code{set}
e6512bcf
RS
857always affects the most local existing binding.
858@end quotation
859@end defun
860
861@node Variable Scoping
862@section Scoping Rules for Variable Bindings
863
f9f59935 864 A given symbol @code{foo} can have several local variable bindings,
e6512bcf
RS
865established at different places in the Lisp program, as well as a global
866binding. The most recently established binding takes precedence over
867the others.
868
869@cindex scope
870@cindex extent
871@cindex dynamic scoping
04b6b342 872@cindex lexical scoping
e6512bcf
RS
873 Local bindings in Emacs Lisp have @dfn{indefinite scope} and
874@dfn{dynamic extent}. @dfn{Scope} refers to @emph{where} textually in
8241495d 875the source code the binding can be accessed. ``Indefinite scope'' means
e6512bcf
RS
876that any part of the program can potentially access the variable
877binding. @dfn{Extent} refers to @emph{when}, as the program is
8241495d 878executing, the binding exists. ``Dynamic extent'' means that the binding
e6512bcf
RS
879lasts as long as the activation of the construct that established it.
880
881 The combination of dynamic extent and indefinite scope is called
882@dfn{dynamic scoping}. By contrast, most programming languages use
883@dfn{lexical scoping}, in which references to a local variable must be
884located textually within the function or block that binds the variable.
885
886@cindex CL note---special variables
887@quotation
f9f59935
RS
888@b{Common Lisp note:} Variables declared ``special'' in Common Lisp are
889dynamically scoped, like all variables in Emacs Lisp.
e6512bcf
RS
890@end quotation
891
892@menu
893* Scope:: Scope means where in the program a value is visible.
894 Comparison with other languages.
895* Extent:: Extent means how long in time a value exists.
896* Impl of Scope:: Two ways to implement dynamic scoping.
897* Using Scoping:: How to use dynamic scoping carefully and avoid problems.
898@end menu
899
900@node Scope
901@subsection Scope
902
903 Emacs Lisp uses @dfn{indefinite scope} for local variable bindings.
904This means that any function anywhere in the program text might access a
905given binding of a variable. Consider the following function
906definitions:
907
908@example
909@group
910(defun binder (x) ; @r{@code{x} is bound in @code{binder}.}
911 (foo 5)) ; @r{@code{foo} is some other function.}
912@end group
913
914@group
f9f59935 915(defun user () ; @r{@code{x} is used ``free'' in @code{user}.}
e6512bcf
RS
916 (list x))
917@end group
918@end example
919
920 In a lexically scoped language, the binding of @code{x} in
921@code{binder} would never be accessible in @code{user}, because
922@code{user} is not textually contained within the function
8241495d 923@code{binder}. However, in dynamically-scoped Emacs Lisp, @code{user}
e6512bcf 924may or may not refer to the binding of @code{x} established in
8241495d 925@code{binder}, depending on the circumstances:
e6512bcf
RS
926
927@itemize @bullet
928@item
929If we call @code{user} directly without calling @code{binder} at all,
930then whatever binding of @code{x} is found, it cannot come from
931@code{binder}.
932
933@item
f9f59935 934If we define @code{foo} as follows and then call @code{binder}, then the
e6512bcf
RS
935binding made in @code{binder} will be seen in @code{user}:
936
937@example
938@group
939(defun foo (lose)
940 (user))
941@end group
942@end example
943
944@item
f9f59935
RS
945However, if we define @code{foo} as follows and then call @code{binder},
946then the binding made in @code{binder} @emph{will not} be seen in
947@code{user}:
e6512bcf
RS
948
949@example
950(defun foo (x)
951 (user))
952@end example
953
954@noindent
955Here, when @code{foo} is called by @code{binder}, it binds @code{x}.
956(The binding in @code{foo} is said to @dfn{shadow} the one made in
957@code{binder}.) Therefore, @code{user} will access the @code{x} bound
958by @code{foo} instead of the one bound by @code{binder}.
959@end itemize
960
f9f59935
RS
961Emacs Lisp uses dynamic scoping because simple implementations of
962lexical scoping are slow. In addition, every Lisp system needs to offer
963dynamic scoping at least as an option; if lexical scoping is the norm,
964there must be a way to specify dynamic scoping instead for a particular
965variable. It might not be a bad thing for Emacs to offer both, but
966implementing it with dynamic scoping only was much easier.
967
e6512bcf
RS
968@node Extent
969@subsection Extent
970
971 @dfn{Extent} refers to the time during program execution that a
972variable name is valid. In Emacs Lisp, a variable is valid only while
973the form that bound it is executing. This is called @dfn{dynamic
974extent}. ``Local'' or ``automatic'' variables in most languages,
975including C and Pascal, have dynamic extent.
976
977 One alternative to dynamic extent is @dfn{indefinite extent}. This
978means that a variable binding can live on past the exit from the form
979that made the binding. Common Lisp and Scheme, for example, support
980this, but Emacs Lisp does not.
981
982 To illustrate this, the function below, @code{make-add}, returns a
f9f59935
RS
983function that purports to add @var{n} to its own argument @var{m}. This
984would work in Common Lisp, but it does not do the job in Emacs Lisp,
985because after the call to @code{make-add} exits, the variable @code{n}
986is no longer bound to the actual argument 2.
e6512bcf
RS
987
988@example
989(defun make-add (n)
990 (function (lambda (m) (+ n m)))) ; @r{Return a function.}
991 @result{} make-add
992(fset 'add2 (make-add 2)) ; @r{Define function @code{add2}}
993 ; @r{with @code{(make-add 2)}.}
994 @result{} (lambda (m) (+ n m))
995(add2 4) ; @r{Try to add 2 to 4.}
996@error{} Symbol's value as variable is void: n
997@end example
998
999@cindex closures not available
827b7ee7 1000 Some Lisp dialects have ``closures,'' objects that are like functions
e6512bcf
RS
1001but record additional variable bindings. Emacs Lisp does not have
1002closures.
1003
1004@node Impl of Scope
1005@subsection Implementation of Dynamic Scoping
1006@cindex deep binding
1007
1008 A simple sample implementation (which is not how Emacs Lisp actually
1009works) may help you understand dynamic binding. This technique is
1010called @dfn{deep binding} and was used in early Lisp systems.
1011
969fe9b5
RS
1012 Suppose there is a stack of bindings, which are variable-value pairs.
1013At entry to a function or to a @code{let} form, we can push bindings
1014onto the stack for the arguments or local variables created there. We
1015can pop those bindings from the stack at exit from the binding
1016construct.
e6512bcf
RS
1017
1018 We can find the value of a variable by searching the stack from top to
1019bottom for a binding for that variable; the value from that binding is
1020the value of the variable. To set the variable, we search for the
1021current binding, then store the new value into that binding.
1022
1023 As you can see, a function's bindings remain in effect as long as it
1024continues execution, even during its calls to other functions. That is
1025why we say the extent of the binding is dynamic. And any other function
1026can refer to the bindings, if it uses the same variables while the
1027bindings are in effect. That is why we say the scope is indefinite.
1028
1029@cindex shallow binding
1030 The actual implementation of variable scoping in GNU Emacs Lisp uses a
1031technique called @dfn{shallow binding}. Each variable has a standard
1032place in which its current value is always found---the value cell of the
1033symbol.
1034
1035 In shallow binding, setting the variable works by storing a value in
1036the value cell. Creating a new binding works by pushing the old value
f9f59935
RS
1037(belonging to a previous binding) onto a stack, and storing the new
1038local value in the value cell. Eliminating a binding works by popping
1039the old value off the stack, into the value cell.
e6512bcf
RS
1040
1041 We use shallow binding because it has the same results as deep
1042binding, but runs faster, since there is never a need to search for a
1043binding.
1044
1045@node Using Scoping
1046@subsection Proper Use of Dynamic Scoping
1047
1048 Binding a variable in one function and using it in another is a
1049powerful technique, but if used without restraint, it can make programs
1050hard to understand. There are two clean ways to use this technique:
1051
1052@itemize @bullet
1053@item
1054Use or bind the variable only in a few related functions, written close
1055together in one file. Such a variable is used for communication within
1056one program.
1057
1058You should write comments to inform other programmers that they can see
1059all uses of the variable before them, and to advise them not to add uses
1060elsewhere.
1061
1062@item
1063Give the variable a well-defined, documented meaning, and make all
1064appropriate functions refer to it (but not bind it or set it) wherever
1065that meaning is relevant. For example, the variable
1066@code{case-fold-search} is defined as ``non-@code{nil} means ignore case
1067when searching''; various search and replace functions refer to it
1068directly or through their subroutines, but do not bind or set it.
1069
1070Then you can bind the variable in other programs, knowing reliably what
1071the effect will be.
1072@end itemize
1073
bfe721d1
KH
1074 In either case, you should define the variable with @code{defvar}.
1075This helps other people understand your program by telling them to look
1076for inter-function usage. It also avoids a warning from the byte
1077compiler. Choose the variable's name to avoid name conflicts---don't
1078use short names like @code{x}.
1079
e6512bcf
RS
1080@node Buffer-Local Variables
1081@section Buffer-Local Variables
1082@cindex variables, buffer-local
1083@cindex buffer-local variables
1084
1085 Global and local variable bindings are found in most programming
8241495d 1086languages in one form or another. Emacs, however, also supports additional,
969fe9b5 1087unusual kinds of variable binding: @dfn{buffer-local} bindings, which
8241495d 1088apply only in one buffer, and @dfn{frame-local} bindings, which apply only in
969fe9b5
RS
1089one frame. Having different values for a variable in different buffers
1090and/or frames is an important customization method.
1091
1092 This section describes buffer-local bindings; for frame-local
1093bindings, see the following section, @ref{Frame-Local Variables}. (A few
1911e6e5 1094variables have bindings that are local to each terminal; see
969fe9b5 1095@ref{Multiple Displays}.)
e6512bcf
RS
1096
1097@menu
1098* Intro to Buffer-Local:: Introduction and concepts.
1099* Creating Buffer-Local:: Creating and destroying buffer-local bindings.
1100* Default Value:: The default value is seen in buffers
969fe9b5 1101 that don't have their own buffer-local values.
e6512bcf
RS
1102@end menu
1103
1104@node Intro to Buffer-Local
1105@subsection Introduction to Buffer-Local Variables
1106
1107 A buffer-local variable has a buffer-local binding associated with a
1108particular buffer. The binding is in effect when that buffer is
1109current; otherwise, it is not in effect. If you set the variable while
1110a buffer-local binding is in effect, the new value goes in that binding,
f9f59935
RS
1111so its other bindings are unchanged. This means that the change is
1112visible only in the buffer where you made it.
1113
1114 The variable's ordinary binding, which is not associated with any
1115specific buffer, is called the @dfn{default binding}. In most cases,
1116this is the global binding.
e6512bcf 1117
f9f59935
RS
1118 A variable can have buffer-local bindings in some buffers but not in
1119other buffers. The default binding is shared by all the buffers that
969fe9b5 1120don't have their own bindings for the variable. (This includes all
8241495d 1121newly-created buffers.) If you set the variable in a buffer that does
969fe9b5
RS
1122not have a buffer-local binding for it, this sets the default binding
1123(assuming there are no frame-local bindings to complicate the matter),
1124so the new value is visible in all the buffers that see the default
1125binding.
e6512bcf
RS
1126
1127 The most common use of buffer-local bindings is for major modes to change
1128variables that control the behavior of commands. For example, C mode and
1129Lisp mode both set the variable @code{paragraph-start} to specify that only
1130blank lines separate paragraphs. They do this by making the variable
1131buffer-local in the buffer that is being put into C mode or Lisp mode, and
969fe9b5 1132then setting it to the new value for that mode. @xref{Major Modes}.
e6512bcf
RS
1133
1134 The usual way to make a buffer-local binding is with
969fe9b5
RS
1135@code{make-local-variable}, which is what major mode commands typically
1136use. This affects just the current buffer; all other buffers (including
1137those yet to be created) will continue to share the default value unless
1138they are explicitly given their own buffer-local bindings.
e6512bcf
RS
1139
1140@cindex automatically buffer-local
1141 A more powerful operation is to mark the variable as
1142@dfn{automatically buffer-local} by calling
1143@code{make-variable-buffer-local}. You can think of this as making the
1144variable local in all buffers, even those yet to be created. More
1145precisely, the effect is that setting the variable automatically makes
1146the variable local to the current buffer if it is not already so. All
f9f59935 1147buffers start out by sharing the default value of the variable as usual,
969fe9b5 1148but setting the variable creates a buffer-local binding for the current
e6512bcf 1149buffer. The new value is stored in the buffer-local binding, leaving
969fe9b5
RS
1150the default binding untouched. This means that the default value cannot
1151be changed with @code{setq} in any buffer; the only way to change it is
1152with @code{setq-default}.
f9f59935 1153
beab64dc
RS
1154 @strong{Warning:} When a variable has buffer-local or frame-local
1155bindings in one or more buffers, @code{let} rebinds the binding that's
1156currently in effect. For instance, if the current buffer has a
1157buffer-local value, @code{let} temporarily rebinds that. If no
1158buffer-local or frame-local bindings are in effect, @code{let} rebinds
1159the default value. If inside the @code{let} you then change to a
1160different current buffer in which a different binding is in effect,
1161you won't see the @code{let} binding any more. And if you exit the
1162@code{let} while still in the other buffer, you won't see the
1163unbinding occur (though it will occur properly). Here is an example
1164to illustrate:
e6512bcf
RS
1165
1166@example
1167@group
c152cd2a 1168(setq foo 'g)
e6512bcf
RS
1169(set-buffer "a")
1170(make-local-variable 'foo)
1171@end group
1172(setq foo 'a)
1173(let ((foo 'temp))
c152cd2a 1174 ;; foo @result{} 'temp ; @r{let binding in buffer @samp{a}}
e6512bcf 1175 (set-buffer "b")
c152cd2a 1176 ;; foo @result{} 'g ; @r{the global value since foo is not local in @samp{b}}
bfe721d1 1177 @var{body}@dots{})
e6512bcf 1178@group
beab64dc
RS
1179foo @result{} 'g ; @r{exiting restored the local value in buffer @samp{a},}
1180 ; @r{but we don't see that in buffer @samp{b}}
e6512bcf
RS
1181@end group
1182@group
beab64dc
RS
1183(set-buffer "a") ; @r{verify the local value was restored}
1184foo @result{} 'a
e6512bcf
RS
1185@end group
1186@end example
1187
1188 Note that references to @code{foo} in @var{body} access the
1189buffer-local binding of buffer @samp{b}.
1190
1191 When a file specifies local variable values, these become buffer-local
969fe9b5
RS
1192values when you visit the file. @xref{File Variables,,, emacs, The
1193GNU Emacs Manual}.
e6512bcf
RS
1194
1195@node Creating Buffer-Local
1196@subsection Creating and Deleting Buffer-Local Bindings
1197
1198@deffn Command make-local-variable variable
1199This function creates a buffer-local binding in the current buffer for
1200@var{variable} (a symbol). Other buffers are not affected. The value
1201returned is @var{variable}.
1202
1203@c Emacs 19 feature
1204The buffer-local value of @var{variable} starts out as the same value
1205@var{variable} previously had. If @var{variable} was void, it remains
1206void.
1207
1208@example
1209@group
1210;; @r{In buffer @samp{b1}:}
1211(setq foo 5) ; @r{Affects all buffers.}
1212 @result{} 5
1213@end group
1214@group
1215(make-local-variable 'foo) ; @r{Now it is local in @samp{b1}.}
1216 @result{} foo
1217@end group
1218@group
1219foo ; @r{That did not change}
1220 @result{} 5 ; @r{the value.}
1221@end group
1222@group
1223(setq foo 6) ; @r{Change the value}
1224 @result{} 6 ; @r{in @samp{b1}.}
1225@end group
1226@group
1227foo
1228 @result{} 6
1229@end group
1230
1231@group
1232;; @r{In buffer @samp{b2}, the value hasn't changed.}
1233(save-excursion
1234 (set-buffer "b2")
1235 foo)
1236 @result{} 5
1237@end group
1238@end example
e8505179
RS
1239
1240Making a variable buffer-local within a @code{let}-binding for that
969fe9b5
RS
1241variable does not work reliably, unless the buffer in which you do this
1242is not current either on entry to or exit from the @code{let}. This is
1243because @code{let} does not distinguish between different kinds of
1244bindings; it knows only which variable the binding was made for.
22697dac 1245
bfe721d1
KH
1246If the variable is terminal-local, this function signals an error. Such
1247variables cannot have buffer-local bindings as well. @xref{Multiple
1248Displays}.
1249
6142d1d0
RS
1250@strong{Warning:} do not use @code{make-local-variable} for a hook
1251variable. The hook variables are automatically made buffer-local as
1252needed if you use the @var{local} argument to @code{add-hook} or
89cda0c5 1253@code{remove-hook}.
e6512bcf
RS
1254@end deffn
1255
1256@deffn Command make-variable-buffer-local variable
1257This function marks @var{variable} (a symbol) automatically
1258buffer-local, so that any subsequent attempt to set it will make it
1259local to the current buffer at the time.
1260
969fe9b5
RS
1261A peculiar wrinkle of this feature is that binding the variable (with
1262@code{let} or other binding constructs) does not create a buffer-local
1263binding for it. Only setting the variable (with @code{set} or
f36e1798
LT
1264@code{setq}), while the variable does not have a @code{let}-style
1265binding that was made in the current buffer, does so.
1266
1267If @var{variable} does not have a default value, then calling this
1268command will give it a default value of @code{nil}. If @var{variable}
1269already has a default value, that value remains unchanged.
1270Subsequently calling @code{makunbound} on @var{variable} will result
1271in a void buffer-local value and leave the default value unaffected.
ab4b1835 1272
969fe9b5 1273The value returned is @var{variable}.
ab4b1835 1274
969fe9b5
RS
1275@strong{Warning:} Don't assume that you should use
1276@code{make-variable-buffer-local} for user-option variables, simply
1277because users @emph{might} want to customize them differently in
1278different buffers. Users can make any variable local, when they wish
1279to. It is better to leave the choice to them.
1280
1281The time to use @code{make-variable-buffer-local} is when it is crucial
1282that no two buffers ever share the same binding. For example, when a
1283variable is used for internal purposes in a Lisp program which depends
1284on having separate values in separate buffers, then using
1285@code{make-variable-buffer-local} can be the best solution.
e6512bcf
RS
1286@end deffn
1287
bfe721d1
KH
1288@defun local-variable-p variable &optional buffer
1289This returns @code{t} if @var{variable} is buffer-local in buffer
1290@var{buffer} (which defaults to the current buffer); otherwise,
1291@code{nil}.
1292@end defun
1293
dbcd9cd7
RS
1294@defun local-variable-if-set-p variable &optional buffer
1295This returns @code{t} if @var{variable} will become buffer-local in
1296buffer @var{buffer} (which defaults to the current buffer) if it is
1297set there.
1298@end defun
1299
a1c07461 1300@defun buffer-local-value variable buffer
2b99c69a
RS
1301This function returns the buffer-local binding of @var{variable} (a
1302symbol) in buffer @var{buffer}. If @var{variable} does not have a
1303buffer-local binding in buffer @var{buffer}, it returns the default
1304value (@pxref{Default Value}) of @var{variable} instead.
a1c07461
RS
1305@end defun
1306
e6512bcf
RS
1307@defun buffer-local-variables &optional buffer
1308This function returns a list describing the buffer-local variables in
969fe9b5
RS
1309buffer @var{buffer}. (If @var{buffer} is omitted, the current buffer is
1310used.) It returns an association list (@pxref{Association Lists}) in
1311which each element contains one buffer-local variable and its value.
1312However, when a variable's buffer-local binding in @var{buffer} is void,
1313then the variable appears directly in the resulting list.
e6512bcf
RS
1314
1315@example
1316@group
1317(make-local-variable 'foobar)
1318(makunbound 'foobar)
1319(make-local-variable 'bind-me)
1320(setq bind-me 69)
1321@end group
1322(setq lcl (buffer-local-variables))
1323 ;; @r{First, built-in variables local in all buffers:}
1324@result{} ((mark-active . nil)
a9f0a989 1325 (buffer-undo-list . nil)
e6512bcf
RS
1326 (mode-name . "Fundamental")
1327 @dots{}
1328@group
177c0ea7 1329 ;; @r{Next, non-built-in buffer-local variables.}
f9f59935 1330 ;; @r{This one is buffer-local and void:}
e6512bcf 1331 foobar
f9f59935 1332 ;; @r{This one is buffer-local and nonvoid:}
e6512bcf
RS
1333 (bind-me . 69))
1334@end group
1335@end example
1336
1337Note that storing new values into the @sc{cdr}s of cons cells in this
f9f59935 1338list does @emph{not} change the buffer-local values of the variables.
e6512bcf
RS
1339@end defun
1340
1341@deffn Command kill-local-variable variable
1342This function deletes the buffer-local binding (if any) for
1343@var{variable} (a symbol) in the current buffer. As a result, the
f9f59935
RS
1344default binding of @var{variable} becomes visible in this buffer. This
1345typically results in a change in the value of @var{variable}, since the
1346default value is usually different from the buffer-local value just
1347eliminated.
e6512bcf 1348
f9f59935
RS
1349If you kill the buffer-local binding of a variable that automatically
1350becomes buffer-local when set, this makes the default value visible in
1351the current buffer. However, if you set the variable again, that will
1352once again create a buffer-local binding for it.
e6512bcf
RS
1353
1354@code{kill-local-variable} returns @var{variable}.
f57ddf67
RS
1355
1356This function is a command because it is sometimes useful to kill one
1357buffer-local variable interactively, just as it is useful to create
1358buffer-local variables interactively.
e6512bcf
RS
1359@end deffn
1360
1361@defun kill-all-local-variables
1362This function eliminates all the buffer-local variable bindings of the
827b7ee7 1363current buffer except for variables marked as ``permanent.'' As a
e6512bcf
RS
1364result, the buffer will see the default values of most variables.
1365
1366This function also resets certain other information pertaining to the
1367buffer: it sets the local keymap to @code{nil}, the syntax table to the
a9f0a989
RS
1368value of @code{(standard-syntax-table)}, the case table to
1369@code{(standard-case-table)}, and the abbrev table to the value of
1370@code{fundamental-mode-abbrev-table}.
e6512bcf 1371
f9f59935 1372The very first thing this function does is run the normal hook
969fe9b5 1373@code{change-major-mode-hook} (see below).
f9f59935 1374
e6512bcf
RS
1375Every major mode command begins by calling this function, which has the
1376effect of switching to Fundamental mode and erasing most of the effects
1377of the previous major mode. To ensure that this does its job, the
1378variables that major modes set should not be marked permanent.
1379
1380@code{kill-all-local-variables} returns @code{nil}.
1381@end defun
1382
969fe9b5
RS
1383@defvar change-major-mode-hook
1384The function @code{kill-all-local-variables} runs this normal hook
1385before it does anything else. This gives major modes a way to arrange
1386for something special to be done if the user switches to a different
bf614499
RS
1387major mode. It is also useful for buffer-specific minor modes
1388that should be forgotten if the user changes the major mode.
1389
1390For best results, make this variable buffer-local, so that it will
1391disappear after doing its job and will not interfere with the
969fe9b5
RS
1392subsequent major mode. @xref{Hooks}.
1393@end defvar
1394
e6512bcf
RS
1395@c Emacs 19 feature
1396@cindex permanent local variable
f9f59935
RS
1397A buffer-local variable is @dfn{permanent} if the variable name (a
1398symbol) has a @code{permanent-local} property that is non-@code{nil}.
1399Permanent locals are appropriate for data pertaining to where the file
1400came from or how to save it, rather than with how to edit the contents.
e6512bcf
RS
1401
1402@node Default Value
1403@subsection The Default Value of a Buffer-Local Variable
1404@cindex default value
1405
1406 The global value of a variable with buffer-local bindings is also
1407called the @dfn{default} value, because it is the value that is in
969fe9b5
RS
1408effect whenever neither the current buffer nor the selected frame has
1409its own binding for the variable.
e6512bcf
RS
1410
1411 The functions @code{default-value} and @code{setq-default} access and
1412change a variable's default value regardless of whether the current
1413buffer has a buffer-local binding. For example, you could use
1414@code{setq-default} to change the default setting of
1415@code{paragraph-start} for most buffers; and this would work even when
f57ddf67 1416you are in a C or Lisp mode buffer that has a buffer-local value for
e6512bcf
RS
1417this variable.
1418
1419@c Emacs 19 feature
1420 The special forms @code{defvar} and @code{defconst} also set the
f9f59935 1421default value (if they set the variable at all), rather than any
969fe9b5 1422buffer-local or frame-local value.
e6512bcf
RS
1423
1424@defun default-value symbol
1425This function returns @var{symbol}'s default value. This is the value
969fe9b5
RS
1426that is seen in buffers and frames that do not have their own values for
1427this variable. If @var{symbol} is not buffer-local, this is equivalent
1428to @code{symbol-value} (@pxref{Accessing Variables}).
e6512bcf
RS
1429@end defun
1430
1431@c Emacs 19 feature
f57ddf67
RS
1432@defun default-boundp symbol
1433The function @code{default-boundp} tells you whether @var{symbol}'s
e6512bcf
RS
1434default value is nonvoid. If @code{(default-boundp 'foo)} returns
1435@code{nil}, then @code{(default-value 'foo)} would get an error.
1436
1437@code{default-boundp} is to @code{default-value} as @code{boundp} is to
1438@code{symbol-value}.
1439@end defun
1440
a9f0a989
RS
1441@defspec setq-default [symbol form]@dots{}
1442This special form gives each @var{symbol} a new default value, which is
1443the result of evaluating the corresponding @var{form}. It does not
1444evaluate @var{symbol}, but does evaluate @var{form}. The value of the
1445@code{setq-default} form is the value of the last @var{form}.
e6512bcf
RS
1446
1447If a @var{symbol} is not buffer-local for the current buffer, and is not
1448marked automatically buffer-local, @code{setq-default} has the same
1449effect as @code{setq}. If @var{symbol} is buffer-local for the current
1450buffer, then this changes the value that other buffers will see (as long
1451as they don't have a buffer-local value), but not the value that the
1452current buffer sees.
1453
1454@example
1455@group
1456;; @r{In buffer @samp{foo}:}
969fe9b5
RS
1457(make-local-variable 'buffer-local)
1458 @result{} buffer-local
e6512bcf
RS
1459@end group
1460@group
969fe9b5 1461(setq buffer-local 'value-in-foo)
e6512bcf
RS
1462 @result{} value-in-foo
1463@end group
1464@group
969fe9b5 1465(setq-default buffer-local 'new-default)
e6512bcf
RS
1466 @result{} new-default
1467@end group
1468@group
969fe9b5 1469buffer-local
e6512bcf
RS
1470 @result{} value-in-foo
1471@end group
1472@group
969fe9b5 1473(default-value 'buffer-local)
e6512bcf
RS
1474 @result{} new-default
1475@end group
1476
1477@group
1478;; @r{In (the new) buffer @samp{bar}:}
969fe9b5 1479buffer-local
e6512bcf
RS
1480 @result{} new-default
1481@end group
1482@group
969fe9b5 1483(default-value 'buffer-local)
e6512bcf
RS
1484 @result{} new-default
1485@end group
1486@group
969fe9b5 1487(setq buffer-local 'another-default)
e6512bcf
RS
1488 @result{} another-default
1489@end group
1490@group
969fe9b5 1491(default-value 'buffer-local)
e6512bcf
RS
1492 @result{} another-default
1493@end group
1494
1495@group
1496;; @r{Back in buffer @samp{foo}:}
969fe9b5 1497buffer-local
e6512bcf 1498 @result{} value-in-foo
969fe9b5 1499(default-value 'buffer-local)
e6512bcf
RS
1500 @result{} another-default
1501@end group
1502@end example
1503@end defspec
1504
1505@defun set-default symbol value
1506This function is like @code{setq-default}, except that @var{symbol} is
f9f59935 1507an ordinary evaluated argument.
e6512bcf
RS
1508
1509@example
1510@group
1511(set-default (car '(a b c)) 23)
1512 @result{} 23
1513@end group
1514@group
1515(default-value 'a)
1516 @result{} 23
1517@end group
1518@end example
1519@end defun
969fe9b5
RS
1520
1521@node Frame-Local Variables
1522@section Frame-Local Variables
1523
1524 Just as variables can have buffer-local bindings, they can also have
1525frame-local bindings. These bindings belong to one frame, and are in
1526effect when that frame is selected. Frame-local bindings are actually
1527frame parameters: you create a frame-local binding in a specific frame
1528by calling @code{modify-frame-parameters} and specifying the variable
1529name as the parameter name.
1530
1531 To enable frame-local bindings for a certain variable, call the function
1532@code{make-variable-frame-local}.
1533
a9f0a989 1534@deffn Command make-variable-frame-local variable
969fe9b5
RS
1535Enable the use of frame-local bindings for @var{variable}. This does
1536not in itself create any frame-local bindings for the variable; however,
1537if some frame already has a value for @var{variable} as a frame
1538parameter, that value automatically becomes a frame-local binding.
1539
f36e1798
LT
1540If @var{variable} does not have a default value, then calling this
1541command will give it a default value of @code{nil}. If @var{variable}
1542already has a default value, that value remains unchanged.
1543
a9f0a989
RS
1544If the variable is terminal-local, this function signals an error,
1545because such variables cannot have frame-local bindings as well.
1546@xref{Multiple Displays}. A few variables that are implemented
33a992c2 1547specially in Emacs can be buffer-local, but can never be frame-local.
f36e1798
LT
1548
1549This command returns @var{variable}.
a9f0a989 1550@end deffn
969fe9b5
RS
1551
1552 Buffer-local bindings take precedence over frame-local bindings. Thus,
1553consider a variable @code{foo}: if the current buffer has a buffer-local
1554binding for @code{foo}, that binding is active; otherwise, if the
1555selected frame has a frame-local binding for @code{foo}, that binding is
1556active; otherwise, the default binding of @code{foo} is active.
1557
1558 Here is an example. First we prepare a few bindings for @code{foo}:
1559
1560@example
1561(setq f1 (selected-frame))
1562(make-variable-frame-local 'foo)
1563
1564;; @r{Make a buffer-local binding for @code{foo} in @samp{b1}.}
1565(set-buffer (get-buffer-create "b1"))
1566(make-local-variable 'foo)
1567(setq foo '(b 1))
1568
1569;; @r{Make a frame-local binding for @code{foo} in a new frame.}
1570;; @r{Store that frame in @code{f2}.}
1571(setq f2 (make-frame))
1572(modify-frame-parameters f2 '((foo . (f 2))))
1573@end example
1574
1575 Now we examine @code{foo} in various contexts. Whenever the
1576buffer @samp{b1} is current, its buffer-local binding is in effect,
1577regardless of the selected frame:
1578
1579@example
1580(select-frame f1)
1581(set-buffer (get-buffer-create "b1"))
1582foo
1583 @result{} (b 1)
1584
1585(select-frame f2)
1586(set-buffer (get-buffer-create "b1"))
1587foo
1588 @result{} (b 1)
1589@end example
1590
1591@noindent
1592Otherwise, the frame gets a chance to provide the binding; when frame
1593@code{f2} is selected, its frame-local binding is in effect:
1594
1595@example
1596(select-frame f2)
1597(set-buffer (get-buffer "*scratch*"))
1598foo
1599 @result{} (f 2)
1600@end example
1601
1602@noindent
1603When neither the current buffer nor the selected frame provides
1604a binding, the default binding is used:
1605
1606@example
1607(select-frame f1)
1608(set-buffer (get-buffer "*scratch*"))
1609foo
1610 @result{} nil
1611@end example
1612
1613@noindent
1614When the active binding of a variable is a frame-local binding, setting
1615the variable changes that binding. You can observe the result with
1616@code{frame-parameters}:
1617
1618@example
1619(select-frame f2)
1620(set-buffer (get-buffer "*scratch*"))
1621(setq foo 'nobody)
1622(assq 'foo (frame-parameters f2))
1623 @result{} (foo . nobody)
1624@end example
1625
1626@node Future Local Variables
1627@section Possible Future Local Variables
1628
1629 We have considered the idea of bindings that are local to a category
1630of frames---for example, all color frames, or all frames with dark
1631backgrounds. We have not implemented them because it is not clear that
1632this feature is really useful. You can get more or less the same
916a89db 1633results by adding a function to @code{after-make-frame-functions}, set up to
969fe9b5
RS
1634define a particular frame parameter according to the appropriate
1635conditions for each frame.
1636
1637 It would also be possible to implement window-local bindings. We
1638don't know of many situations where they would be useful, and it seems
1639that indirect buffers (@pxref{Indirect Buffers}) with buffer-local
1640bindings offer a way to handle these situations more robustly.
1641
1642 If sufficient application is found for either of these two kinds of
1643local bindings, we will provide it in a subsequent Emacs version.
1644
0b2892c6
LT
1645@node File Local Variables
1646@section File Local Variables
1647
6a20a606
RS
1648 A file can specify local variable values; Emacs uses these to create
1649buffer-local bindings for those variables in the buffer visiting that
1650file. @xref{File variables, , Local Variables in Files, emacs, The
1651GNU Emacs Manual}, for basic information about file local variables.
1652This section describes the functions and variables that affect
1653processing of file local variables.
0b2892c6
LT
1654
1655@defopt enable-local-variables
1656This variable controls whether to process file local variables. A
51a39bab
CY
1657value of @code{t} means to process them, querying the user if unsafe
1658variables are encountered; @code{nil} means ignore them; anything else
1659means to query the user for each file. The default value is @code{t}.
0b2892c6
LT
1660@end defopt
1661
1662@defun hack-local-variables &optional mode-only
1663This function parses, and binds or evaluates as appropriate, any local
1664variables specified by the contents of the current buffer. The variable
1665@code{enable-local-variables} has its effect here. However, this
1666function does not look for the @samp{mode:} local variable in the
1667@w{@samp{-*-}} line. @code{set-auto-mode} does that, also taking
1668@code{enable-local-variables} into account (@pxref{Auto Major Mode}).
1669
1670If the optional argument @var{mode-only} is non-@code{nil}, then all
1671this function does is return @code{t} if the @w{@samp{-*-}} line or
1672the local variables list specifies a mode and @code{nil} otherwise.
1673It does not set the mode nor any other file local variable.
1674@end defun
1675
1676 If a file local variable could specify a function that would
1677be called later, or an expression that would be executed later, simply
51a39bab
CY
1678visiting a file could take over your Emacs. Emacs takes several
1679measures to prevent this.
1680
1681@cindex safe local variable
3fdd8b9a 1682 You can specify safe values for a variable with a
7817e3d3
SM
1683@code{safe-local-variable} property. The property has to be
1684a function of one argument; any value is safe if the function
1685returns non-@code{nil} given that value. Many commonly encountered
1686file variables standardly have @code{safe-local-variable} properties,
1687including @code{fill-column}, @code{fill-prefix}, and
beea1ef6 1688@code{indent-tabs-mode}. For boolean-valued variables that are safe,
31035927
RS
1689use @code{booleanp} as the property value. Lambda expressions should
1690be quoted so that @code{describe-variable} can display the predicate.
51a39bab
CY
1691
1692@defopt safe-local-variable-values
1324d26e
RS
1693This variable provides another way to mark some variable values as
1694safe. It is a list of cons cells @code{(@var{var} . @var{val})},
1695where @var{var} is a variable name and @var{val} is a value which is
1696safe for that variable.
51a39bab 1697
3fdd8b9a
RS
1698When Emacs asks the user whether or not to obey a set of file local
1699variable specifications, the user can choose to mark them as safe.
1700Doing so adds those variable/value pairs to
1701@code{safe-local-variable-values}, and saves it to the user's custom
1702file.
51a39bab
CY
1703@end defopt
1704
1705@defun safe-local-variable-p sym val
1706This function returns non-@code{nil} if it is safe to give @var{sym}
1707the value @var{val}, based on the above criteria.
1708@end defun
0b2892c6 1709
51a39bab 1710@cindex risky local variable
1324d26e
RS
1711 Some variables are considered @dfn{risky}. A variable whose name
1712ends in any of @samp{-command}, @samp{-frame-alist}, @samp{-function},
a61a6fd9
RS
1713@samp{-functions}, @samp{-hook}, @samp{-hooks}, @samp{-form},
1714@samp{-forms}, @samp{-map}, @samp{-map-alist}, @samp{-mode-alist},
51a39bab
CY
1715@samp{-program}, or @samp{-predicate} is considered risky. The
1716variables @samp{font-lock-keywords}, @samp{font-lock-keywords}
1717followed by a digit, and @samp{font-lock-syntactic-keywords} are also
1718considered risky. Finally, any variable whose name has a
1719non-@code{nil} @code{risky-local-variable} property is considered
1720risky.
1721
1722@defun risky-local-variable-p sym
1723This function returns non-@code{nil} if @var{sym} is a risky variable,
1724based on the above criteria.
1725@end defun
1726
1324d26e 1727 If a variable is risky, it will not be entered automatically into
51a39bab
CY
1728@code{safe-local-variable-values} as described above. Therefore,
1729Emacs will always query before setting a risky variable, unless the
3fdd8b9a
RS
1730user explicitly allows the setting by customizing
1731@code{safe-local-variable-values} directly.
0b2892c6
LT
1732
1733@defvar ignored-local-variables
1734This variable holds a list of variables that should not be given local
1735values by files. Any value specified for one of these variables is
51a39bab 1736completely ignored.
0b2892c6
LT
1737@end defvar
1738
0b2892c6
LT
1739 The @samp{Eval:} ``variable'' is also a potential loophole, so Emacs
1740normally asks for confirmation before handling it.
1741
1742@defopt enable-local-eval
1743This variable controls processing of @samp{Eval:} in @samp{-*-} lines
1744or local variables
1745lists in files being visited. A value of @code{t} means process them
1746unconditionally; @code{nil} means ignore them; anything else means ask
1747the user what to do for each file. The default value is @code{maybe}.
1748@end defopt
1749
f12a0718
RS
1750@defopt safe-local-eval-forms
1751This variable holds a list of expressions that are safe to
1752evaluate when found in the @samp{Eval:} ``variable'' in a file
1753local variables list.
1754@end defopt
1755
1756 If the expression is a function call and the function has a
1757@code{safe-local-eval-function} property, the property value
1758determines whether the expression is safe to evaluate. The property
1759value can be a predicate to call to test the expression, a list of
1760such predicates (it's safe if any predicate succeeds), or @code{t}
1761(always safe provided the arguments are constant).
1762
0b2892c6
LT
1763 Text properties are also potential loopholes, since their values
1764could include functions to call. So Emacs discards all text
1765properties from string values specified for file local variables.
1766
26236f6d
GM
1767@node Variable Aliases
1768@section Variable Aliases
1769
1770 It is sometimes useful to make two variables synonyms, so that both
1771variables always have the same value, and changing either one also
1772changes the other. Whenever you change the name of a
1773variable---either because you realize its old name was not well
1774chosen, or because its meaning has partly changed---it can be useful
1775to keep the old name as an @emph{alias} of the new one for
1776compatibility. You can do this with @code{defvaralias}.
1777
51cd2a8c
JB
1778@defun defvaralias new-alias base-variable &optional docstring
1779This function defines the symbol @var{new-alias} as a variable alias
babe03d6
RS
1780for symbol @var{base-variable}. This means that retrieving the value
1781of @var{new-alias} returns the value of @var{base-variable}, and
1782changing the value of @var{new-alias} changes the value of
1783@var{base-variable}. The two aliased variable names always share the
1784same value and the same bindings.
32ebbc3a 1785
a1c07461 1786If the @var{docstring} argument is non-@code{nil}, it specifies the
51cd2a8c
JB
1787documentation for @var{new-alias}; otherwise, the alias gets the same
1788documentation as @var{base-variable} has, if any, unless
1789@var{base-variable} is itself an alias, in which case @var{new-alias} gets
1790the documentation of the variable at the end of the chain of aliases.
f36e1798 1791
51cd2a8c 1792This function returns @var{base-variable}.
3fdb4c50 1793@end defun
26236f6d 1794
5648486c 1795 Variable aliases are convenient for replacing an old name for a
a33db1dd
RS
1796variable with a new name. @code{make-obsolete-variable} declares that
1797the old name is obsolete and therefore that it may be removed at some
1798stage in the future.
727273e7 1799
51cd2a8c 1800@defun make-obsolete-variable obsolete-name current-name &optional when
ca5ade2f 1801This function makes the byte-compiler warn that the variable
51cd2a8c
JB
1802@var{obsolete-name} is obsolete. If @var{current-name} is a symbol, it is
1803the variable's new name; then the warning message says to use
1804@var{current-name} instead of @var{obsolete-name}. If @var{current-name}
1805is a string, this is the message and there is no replacement variable.
a33db1dd
RS
1806
1807If provided, @var{when} should be a string indicating when the
1808variable was first made obsolete---for example, a date or a release
1809number.
ca5ade2f 1810@end defun
727273e7 1811
5648486c 1812 You can make two variables synonyms and declare one obsolete at the
727273e7
NR
1813same time using the macro @code{define-obsolete-variable-alias}.
1814
51cd2a8c
JB
1815@defmac define-obsolete-variable-alias obsolete-name current-name &optional when docstring
1816This macro marks the variable @var{obsolete-name} as obsolete and also
a61a6fd9
RS
1817makes it an alias for the variable @var{current-name}. It is
1818equivalent to the following:
6c9fb588
LT
1819
1820@example
a61a6fd9
RS
1821(defvaralias @var{obsolete-name} @var{current-name} @var{docstring})
1822(make-obsolete-variable @var{obsolete-name} @var{current-name} @var{when})
6c9fb588 1823@end example
727273e7
NR
1824@end defmac
1825
26236f6d
GM
1826@defun indirect-variable variable
1827This function returns the variable at the end of the chain of aliases
1828of @var{variable}. If @var{variable} is not a symbol, or if @var{variable} is
1829not defined as an alias, the function returns @var{variable}.
571fd4d5
JH
1830
1831This function signals a @code{cyclic-variable-indirection} error if
1832there is a loop in the chain of symbols.
26236f6d
GM
1833@end defun
1834
1835@example
1836(defvaralias 'foo 'bar)
1837(indirect-variable 'foo)
1838 @result{} bar
1839(indirect-variable 'bar)
1840 @result{} bar
1841(setq bar 2)
1842bar
1843 @result{} 2
f36e1798 1844@group
26236f6d
GM
1845foo
1846 @result{} 2
f36e1798 1847@end group
26236f6d
GM
1848(setq foo 0)
1849bar
1850 @result{} 0
1851foo
1852 @result{} 0
1853@end example
1854
74ab3aa3
LT
1855@node Variables with Restricted Values
1856@section Variables with Restricted Values
1857
1858 Ordinary Lisp variables can be assigned any value that is a valid
1859Lisp object. However, certain Lisp variables are not defined in Lisp,
1860but in C. Most of these variables are defined in the C code using
1861@code{DEFVAR_LISP}. Like variables defined in Lisp, these can take on
1862any value. However, some variables are defined using
1863@code{DEFVAR_INT} or @code{DEFVAR_BOOL}. @xref{Defining Lisp
1864variables in C,, Writing Emacs Primitives}, in particular the
1865description of functions of the type @code{syms_of_@var{filename}},
1866for a brief discussion of the C implementation.
1867
1868 Variables of type @code{DEFVAR_BOOL} can only take on the values
1869@code{nil} or @code{t}. Attempting to assign them any other value
1870will set them to @code{t}:
1871
1872@example
1873(let ((display-hourglass 5))
1874 display-hourglass)
1875 @result{} t
1876@end example
1877
1878@defvar byte-boolean-vars
1879This variable holds a list of all variables of type @code{DEFVAR_BOOL}.
1880@end defvar
1881
1882 Variables of type @code{DEFVAR_INT} can only take on integer values.
1883Attempting to assign them any other value will result in an error:
1884
1885@example
1886(setq window-min-height 5.0)
1887@error{} Wrong type argument: integerp, 5.0
1888@end example
1889
ab5796a9
MB
1890@ignore
1891 arch-tag: 5ff62c44-2b51-47bb-99d4-fea5aeec5d3e
1892@end ignore