]> code.delx.au - gnu-emacs/blobdiff - lispref/variables.texi
Set up tables for 8859-6.
[gnu-emacs] / lispref / variables.texi
index 5d19cbefd0ea67200dcc1f6c294b04c2e0b2ee5e..48003e0977aec6fcd515d431645f05078a2334c0 100644 (file)
@@ -1185,10 +1185,10 @@ be changed with @code{setq} in any buffer; the only way to change it is
 with @code{setq-default}.
 
   @strong{Warning:} When a variable has buffer-local values in one or
 with @code{setq-default}.
 
   @strong{Warning:} When a variable has buffer-local values in one or
-more buffers, you can get Emacs very confused by binding the variable
-with @code{let}, changing to a different current buffer in which a
-different binding is in effect, and then exiting the @code{let}.  This
-can scramble the values of the buffer-local and default bindings.
+more buffers, binding the variable with @code{let} and changing to a
+different current buffer in which a different binding is in
+effect, and then exiting the @code{let}, the variable may not be
+restored to the value it had before the @code{let}.
 
   To preserve your sanity, avoid using a variable in that way.  If you
 use @code{save-excursion} around each piece of code that changes to a
 
   To preserve your sanity, avoid using a variable in that way.  If you
 use @code{save-excursion} around each piece of code that changes to a
@@ -1197,22 +1197,23 @@ different current buffer, you will not have this problem
 
 @example
 @group
 
 @example
 @group
-(setq foo 'b)
+(setq foo 'g)
 (set-buffer "a")
 (make-local-variable 'foo)
 @end group
 (setq foo 'a)
 (let ((foo 'temp))
 (set-buffer "a")
 (make-local-variable 'foo)
 @end group
 (setq foo 'a)
 (let ((foo 'temp))
+  ;; foo @result{} 'temp  ; @r{let binding in buffer @samp{a}}
   (set-buffer "b")
   (set-buffer "b")
+  ;; foo @result{} 'g     ; @r{the global value since foo is not local in @samp{b}}
   @var{body}@dots{})
 @group
   @var{body}@dots{})
 @group
-foo @result{} 'a      ; @r{The old buffer-local value from buffer @samp{a}}
-               ;   @r{is now the default value.}
+foo @result{} 'a        ; @r{we are still in buffer @samp{b}, but exiting the let}
+                 ; @r{restored the local value in buffer @samp{a}}
 @end group
 @group
 @end group
 @group
-(set-buffer "a")
-foo @result{} 'temp   ; @r{The local @code{let} value that should be gone}
-               ;   @r{is now the buffer-local value in buffer @samp{a}.}
+(set-buffer "a") ; @r{This can be seen here:}
+foo @result{} 'a        ; @r{we are back to the local value in buffer @samp{a}}
 @end group
 @end example
 
 @end group
 @end example
 
@@ -1291,7 +1292,9 @@ variables cannot have buffer-local bindings as well.  @xref{Multiple
 Displays}.
 
 @strong{Note:} Do not use @code{make-local-variable} for a hook
 Displays}.
 
 @strong{Note:} Do not use @code{make-local-variable} for a hook
-variable.  Instead, use @code{make-local-hook}.  @xref{Hooks}.
+variable.  The hook variables are automatically made buffer-local
+as needed if you use the @var{local} argument to @code{add-hook} or
+@code{remove-hook}.
 @end deffn
 
 @deffn Command make-variable-buffer-local variable
 @end deffn
 
 @deffn Command make-variable-buffer-local variable
@@ -1673,12 +1676,16 @@ chosen, or because its meaning has partly changed---it can be useful
 to keep the old name as an @emph{alias} of the new one for
 compatibility.  You can do this with @code{defvaralias}.
 
 to keep the old name as an @emph{alias} of the new one for
 compatibility.  You can do this with @code{defvaralias}.
 
-@defmac defvaralias alias-var base-var
+@defun defvaralias alias-var base-var [docstring]
 This function defines the symbol @var{alias-var} as a variable alias
 This function defines the symbol @var{alias-var} as a variable alias
-for symbol @var{base-var}.  This means that retrieving the value of
+for symbol @var{base-var}. This means that retrieving the value of
 @var{alias-var} returns the value of @var{base-var}, and changing the
 value of @var{alias-var} changes the value of @var{base-var}.
 @var{alias-var} returns the value of @var{base-var}, and changing the
 value of @var{alias-var} changes the value of @var{base-var}.
-@end defmac
+
+If the @var{docstring} argument is present, it specifies the documentation for
+@var{alias-var}; otherwise, it has the same documentation as @var{base-var},
+if any.
+@end defun
 
 @defun indirect-variable variable
 This function returns the variable at the end of the chain of aliases
 
 @defun indirect-variable variable
 This function returns the variable at the end of the chain of aliases
@@ -1726,20 +1733,25 @@ The argument @var{force} usually comes from the argument @var{find-file}
 given to @code{normal-mode}.
 @end defun
 
 given to @code{normal-mode}.
 @end defun
 
-  If a file local variable list could specify the a function that will
+  If a file local variable list could specify a function that will
 be called later, or an expression that will be executed later, simply
 visiting a file could take over your Emacs.  To prevent this, Emacs
 takes care not to allow local variable lists to set such variables.
 
 be called later, or an expression that will be executed later, simply
 visiting a file could take over your Emacs.  To prevent this, Emacs
 takes care not to allow local variable lists to set such variables.
 
-  For one thing, any variable whose name ends in @samp{-function},
-@samp{-functions}, @samp{-hook}, @samp{-hooks}, @samp{-form},
-@samp{-forms}, @samp{-program}, @samp{-command} or @samp{-predicate}
-cannot be set in a local variable list.  In general, you should use such
-a name whenever it is appropriate for the variable's meaning.
+  For one thing, any variable whose name ends in @samp{-command},
+@samp{-frame-alist}, @samp{-function}, @samp{-functions},
+@samp{-hook}, @samp{-hooks}, @samp{-form}, @samp{-forms}, @samp{-map},
+@samp{-map-alist}, @samp{-mode-alist}, @samp{-program}, or
+@samp{-predicate} cannot be set in a local variable list.  In general,
+you should use such a name whenever it is appropriate for the
+variable's meaning.  The variables @samp{font-lock-keywords},
+@samp{font-lock-keywords-[0-9]}, and
+@samp{font-lock-syntactic-keywords} cannot be set in a local variable
+list, either.
 
   In addition, any variable whose name has a non-@code{nil}
 
   In addition, any variable whose name has a non-@code{nil}
-@code{risky-local-variable} property is also ignored.  So are
-all variables listed in @code{ignored-local-variables}:
+@code{risky-local-variable} property is also ignored.  So are all
+variables listed in @code{ignored-local-variables}:
 
 @defvar ignored-local-variables
 This variable holds a list of variables that should not be
 
 @defvar ignored-local-variables
 This variable holds a list of variables that should not be
@@ -1747,6 +1759,10 @@ set by a file's local variables list.  Any value specified
 for one of these variables is ignored.
 @end defvar
 
 for one of these variables is ignored.
 @end defvar
 
+@defun risky-local-variable-p sym
+Returns non-nil if @var{sym} is risky for any of the reasons stated above.
+@end defun
+
   The @samp{Eval:} ``variable'' is also a potential loophole, so Emacs
 normally asks for confirmation before handling it.
 
   The @samp{Eval:} ``variable'' is also a potential loophole, so Emacs
 normally asks for confirmation before handling it.