(Variables): Clarify introduction.

(Global Variables): Mention that setq is a special form.
(Local Variables): Use active voice.
(Tips for Defining): Mention marking variables as safe.
(Buffer-Local Variables): Mention terminal-local and frame-local
variables together.
(File Local Variables): Copyedits.
(Frame-Local Variables): Note that they are not really useful.
(Future Local Variables): Node deleted.
This commit is contained in:
Chong Yidong 2009-02-27 03:59:03 +00:00
parent d0884adf3e
commit 3277011456

View file

@ -15,16 +15,15 @@ symbols.
In Lisp, unlike most programming languages, programs are represented
primarily as Lisp objects and only secondarily as text. The Lisp
objects used for variables are symbols: the symbol name is the variable
name, and the variable's value is stored in the value cell of the
symbol. The use of a symbol as a variable is independent of its use as
a function name. @xref{Symbol Components}.
objects used for variables are symbols: the symbol name is the
variable name, and the variable's value is stored in the value cell of
the symbol. The use of a symbol as a variable is independent of its
use as a function name. @xref{Symbol Components}.
The Lisp objects that constitute a Lisp program determine the textual
form of the program---it is simply the read syntax for those Lisp
objects. This is why, for example, a variable in a textual Lisp program
is written using the read syntax for the symbol that represents the
variable.
The textual form of a Lisp program is given by the read syntax of
the Lisp objects that constitute the program. Hence, a variable in a
textual Lisp program is written using the read syntax for the symbol
representing the variable.
@menu
* Global Variables:: Variable values that exist permanently, everywhere.
@ -42,7 +41,6 @@ variable.
* File Local Variables:: Handling local variable lists in files.
* Directory Local Variables:: Local variables common to all files in a directory.
* Frame-Local Variables:: Frame-local bindings for variables.
* Future Local Variables:: New kinds of local values we might add some day.
* Variable Aliases:: Variables that are aliases for other variables.
* Variables with Restricted Values:: Non-constant variables whose value can
@emph{not} be an arbitrary Lisp object.
@ -66,11 +64,12 @@ old one, no trace of the old value remains in the variable.
@noindent
gives the variable @code{x} the value @code{(a b)}. Note that
@code{setq} does not evaluate its first argument, the name of the
variable, but it does evaluate the second argument, the new value.
@code{setq} is a special form (@pxref{Special Forms}); it does not
evaluate its first argument, the name of the variable, but it does
evaluate the second argument, the new value.
Once the variable has a value, you can refer to it by using the symbol
by itself as an expression. Thus,
Once the variable has a value, you can refer to it by using the
symbol itself as an expression. Thus,
@example
@group
@ -153,11 +152,11 @@ special form explicitly establishes new local values for specified
variables; these last until exit from the @code{let} form.
@cindex shadowing of variables
Establishing a local value saves away the previous value (or lack of
one) of the variable. When the life span of the local value is over,
the previous value is restored. In the mean time, we say that the
previous value is @dfn{shadowed} and @dfn{not visible}. Both global and
local values may be shadowed (@pxref{Scope}).
Establishing a local value saves away the variable's previous value
(or lack of one). We say that the previous value is @dfn{shadowed}
and @dfn{not visible}. Both global and local values may be shadowed
(@pxref{Scope}). After the life span of the local value is over, the
previous value (or lack of one) is restored.
If you set a variable (such as with @code{setq}) while it is local,
this replaces the local value; it does not alter the global value, or
@ -165,10 +164,10 @@ previous local values, that are shadowed. To model this behavior, we
speak of a @dfn{local binding} of the variable as well as a local value.
The local binding is a conceptual place that holds a local value.
Entry to a function, or a special form such as @code{let}, creates the
local binding; exit from the function or from the @code{let} removes the
local binding. As long as the local binding lasts, the variable's value
is stored within it. Use of @code{setq} or @code{set} while there is a
Entering a function, or a special form such as @code{let}, creates the
local binding; exiting the function or the @code{let} removes the
local binding. While the local binding lasts, the variable's value is
stored within it. Using @code{setq} or @code{set} while there is a
local binding stores a different value into the local binding; it does
not create a new binding.
@ -267,9 +266,9 @@ like ordinary local bindings, but they are localized depending on
@cindex evaluation error
@cindex infinite recursion
This variable defines the limit on the total number of local variable
bindings and @code{unwind-protect} cleanups (@pxref{Cleanups,,
Cleaning Up from Nonlocal Exits}) that are allowed before signaling an
error (with data @code{"Variable binding depth exceeds
bindings and @code{unwind-protect} cleanups (see @ref{Cleanups,,
Cleaning Up from Nonlocal Exits}) that are allowed before Emacs
signals an error (with data @code{"Variable binding depth exceeds
max-specpdl-size"}).
This limit, with the associated error when it is exceeded, is one way
@ -635,7 +634,7 @@ The value specifies options for a command.
@end table
When you define a variable, always consider whether you should mark
it as ``risky''; see @ref{File Local Variables}.
it as ``safe'' or ``risky''; see @ref{File Local Variables}.
When defining and initializing a variable that holds a complicated
value (such as a keymap with bindings in it), it's best to put the
@ -1091,9 +1090,9 @@ languages in one form or another. Emacs, however, also supports
additional, unusual kinds of variable binding, such as
@dfn{buffer-local} bindings, which apply only in one buffer. Having
different values for a variable in different buffers is an important
customization method. (A few variables have bindings that are local
to each terminal; see @ref{Multiple Displays}. You can also have
frame-local bindings for variables; see @ref{Frame-Local Variables}.)
customization method. (Variables can also have bindings that are
local to each terminal, or to each frame. @xref{Multiple Displays},
and @xref{Frame-Local Variables}.)
@menu
* Intro to Buffer-Local:: Introduction and concepts.
@ -1192,7 +1191,7 @@ buffer-local binding of buffer @samp{b}.
values when you visit the file. @xref{File Variables,,, emacs, The
GNU Emacs Manual}.
A variable cannot be both buffer-local and frame-local
A buffer-local variable cannot be made frame-local
(@pxref{Frame-Local Variables}) or terminal-local (@pxref{Multiple
Displays}).
@ -1204,7 +1203,6 @@ This function creates a buffer-local binding in the current buffer for
@var{variable} (a symbol). Other buffers are not affected. The value
returned is @var{variable}.
@c Emacs 19 feature
The buffer-local value of @var{variable} starts out as the same value
@var{variable} previously had. If @var{variable} was void, it remains
void.
@ -1531,12 +1529,18 @@ an ordinary evaluated argument.
A file can specify local variable values; Emacs uses these to create
buffer-local bindings for those variables in the buffer visiting that
file. @xref{File variables, , Local Variables in Files, emacs, The
GNU Emacs Manual}, for basic information about file local variables.
This section describes the functions and variables that affect
processing of file local variables.
GNU Emacs Manual}, for basic information about file-local variables.
This section describes the functions and variables that affect how
file-local variables are processed.
If a file-local variable could specify an arbitrary function or Lisp
expression that would be called later, visiting a file could take over
your Emacs. Emacs protects against this by automatically setting only
those file-local variables whose specified values are known to be
safe. Other file-local variables are set only if the user agrees.
@defopt enable-local-variables
This variable controls whether to process file local variables.
This variable controls whether to process file-local variables.
The possible values are:
@table @asis
@ -1570,7 +1574,7 @@ variables, respectively.
If the optional argument @var{mode-only} is non-@code{nil}, then all
this function does is return @code{t} if the @w{@samp{-*-}} line or
the local variables list specifies a mode and @code{nil} otherwise.
It does not set the mode nor any other file local variable.
It does not set the mode nor any other file-local variable.
@end defun
@defvar file-local-variables-alist
@ -1593,21 +1597,16 @@ Emacs calls this hook immediately after it finishes applying
file-local variables stored in @code{file-local-variables-alist}.
@end defvar
If a file local variable could specify a function that would
be called later, or an expression that would be executed later, simply
visiting a file could take over your Emacs. Emacs takes several
measures to prevent this.
@cindex safe local variable
You can specify safe values for a variable with a
@code{safe-local-variable} property. The property has to be
a function of one argument; any value is safe if the function
returns non-@code{nil} given that value. Many commonly encountered
file variables standardly have @code{safe-local-variable} properties,
including @code{fill-column}, @code{fill-prefix}, and
@code{indent-tabs-mode}. For boolean-valued variables that are safe,
use @code{booleanp} as the property value. Lambda expressions should
be quoted so that @code{describe-variable} can display the predicate.
@code{safe-local-variable} property. The property has to be a
function of one argument; any value is safe if the function returns
non-@code{nil} given that value. Many commonly-encountered file
variables have @code{safe-local-variable} properties; these include
@code{fill-column}, @code{fill-prefix}, and @code{indent-tabs-mode}.
For boolean-valued variables that are safe, use @code{booleanp} as the
property value. Lambda expressions should be quoted so that
@code{describe-variable} can display the predicate.
@defopt safe-local-variable-values
This variable provides another way to mark some variable values as
@ -1615,7 +1614,7 @@ safe. It is a list of cons cells @code{(@var{var} . @var{val})},
where @var{var} is a variable name and @var{val} is a value which is
safe for that variable.
When Emacs asks the user whether or not to obey a set of file local
When Emacs asks the user whether or not to obey a set of file-local
variable specifications, the user can choose to mark them as safe.
Doing so adds those variable/value pairs to
@code{safe-local-variable-values}, and saves it to the user's custom
@ -1682,7 +1681,7 @@ such predicates (it's safe if any predicate succeeds), or @code{t}
Text properties are also potential loopholes, since their values
could include functions to call. So Emacs discards all text
properties from string values specified for file local variables.
properties from string values specified for file-local variables.
@node Directory Local Variables
@section Directory Local Variables
@ -1769,11 +1768,15 @@ is updated by @code{dir-locals-set-directory-class}.
In addition to buffer-local variable bindings (@pxref{Buffer-Local
Variables}), Emacs supports @dfn{frame-local} bindings. A frame-local
binding for a variable is in effect in a frame for which it was
defined. Note that you cannot have frame-local bindings for a
variable that has a buffer-local binding.
defined.
To define a frame-specific binding for a variable @var{var} in frame
@var{frame}, set the @var{var} frame parameter for that frame:
In practice, frame-local variables have not proven very useful.
Ordinary frame parameters are generally used instead (@pxref{Frame
Parameters}). The function @code{make-variable-frame-local}, which
was used to define frame-local variables, has been deprecated since
Emacs 22.2. However, you can still define a frame-specific binding
for a variable @var{var} in frame @var{frame}, by setting the
@var{var} frame parameter for that frame:
@lisp
(modify-frame-parameters @var{frame} '((@var{var} . @var{value})))
@ -1781,34 +1784,12 @@ variable that has a buffer-local binding.
@noindent
This causes the variable @var{var} to be bound to the specified
@var{value} in the named @var{frame}. @xref{Parameter Access,
modify-frame-parameters}.
@var{value} in the named @var{frame}. To check the frame-specific
values of such variables, use @code{frame-parameter}. @xref{Parameter
Access}.
@findex make-variable-frame-local@r{, deprecated}
Use of @code{make-variable-frame-local} for defining frame-local
bindings is deprecated since Emacs 22.2.
To check the frame-specific values of such variables, use
@code{frame-parameter} (@pxref{Parameter Access, frame-parameter}).
@node Future Local Variables
@section Possible Future Local Variables
We have considered the idea of bindings that are local to a category
of frames---for example, all color frames, or all frames with dark
backgrounds. We have not implemented them because it is not clear that
this feature is really useful. You can get more or less the same
results by adding a function to @code{after-make-frame-functions}, set up to
define a particular frame parameter according to the appropriate
conditions for each frame.
It would also be possible to implement window-local bindings. We
don't know of many situations where they would be useful, and it seems
that indirect buffers (@pxref{Indirect Buffers}) with buffer-local
bindings offer a way to handle these situations more robustly.
If sufficient application is found for either of these two kinds of
local bindings, we will provide it in a subsequent Emacs version.
Note that you cannot have a frame-local binding for a variable that
has a buffer-local binding.
@node Variable Aliases
@section Variable Aliases