diff options
| author | Kim F. Storm | 2002-05-13 19:04:27 +0000 |
|---|---|---|
| committer | Kim F. Storm | 2002-05-13 19:04:27 +0000 |
| commit | c152cd2a2015be5659746aea7e713499c65edbee (patch) | |
| tree | 608b770ca1974da7da5846a567c6a1c39dfe8ec4 /lispref | |
| parent | 4e792dbd39e6229446931c11803e3a40952236c3 (diff) | |
| download | emacs-c152cd2a2015be5659746aea7e713499c65edbee.tar.gz emacs-c152cd2a2015be5659746aea7e713499c65edbee.zip | |
(Intro to Buffer-Local): Updated warning and
example relating to changing buffer inside let.
Diffstat (limited to 'lispref')
| -rw-r--r-- | lispref/variables.texi | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/lispref/variables.texi b/lispref/variables.texi index df816f85b68..d7a5929bcfb 100644 --- a/lispref/variables.texi +++ b/lispref/variables.texi | |||
| @@ -1185,10 +1185,10 @@ be changed with @code{setq} in any buffer; the only way to change it is | |||
| 1185 | with @code{setq-default}. | 1185 | with @code{setq-default}. |
| 1186 | 1186 | ||
| 1187 | @strong{Warning:} When a variable has buffer-local values in one or | 1187 | @strong{Warning:} When a variable has buffer-local values in one or |
| 1188 | more buffers, you can get Emacs very confused by binding the variable | 1188 | more buffers, binding the variable with @code{let} and changing to a |
| 1189 | with @code{let}, changing to a different current buffer in which a | 1189 | different current buffer in which a different binding is in |
| 1190 | different binding is in effect, and then exiting the @code{let}. This | 1190 | effect, and then exiting the @code{let}, the variable may not be |
| 1191 | can scramble the values of the buffer-local and default bindings. | 1191 | restored to the value it had before the @code{let}. |
| 1192 | 1192 | ||
| 1193 | To preserve your sanity, avoid using a variable in that way. If you | 1193 | To preserve your sanity, avoid using a variable in that way. If you |
| 1194 | use @code{save-excursion} around each piece of code that changes to a | 1194 | 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 | |||
| 1197 | 1197 | ||
| 1198 | @example | 1198 | @example |
| 1199 | @group | 1199 | @group |
| 1200 | (setq foo 'b) | 1200 | (setq foo 'g) |
| 1201 | (set-buffer "a") | 1201 | (set-buffer "a") |
| 1202 | (make-local-variable 'foo) | 1202 | (make-local-variable 'foo) |
| 1203 | @end group | 1203 | @end group |
| 1204 | (setq foo 'a) | 1204 | (setq foo 'a) |
| 1205 | (let ((foo 'temp)) | 1205 | (let ((foo 'temp)) |
| 1206 | ;; foo @result{} 'temp ; @r{let binding in buffer @samp{a}} | ||
| 1206 | (set-buffer "b") | 1207 | (set-buffer "b") |
| 1208 | ;; foo @result{} 'g ; @r{the global value since foo is not local in @samp{b}} | ||
| 1207 | @var{body}@dots{}) | 1209 | @var{body}@dots{}) |
| 1208 | @group | 1210 | @group |
| 1209 | foo @result{} 'a ; @r{The old buffer-local value from buffer @samp{a}} | 1211 | foo @result{} 'a ; @r{we are still in buffer @samp{b}, but exiting the let} |
| 1210 | ; @r{is now the default value.} | 1212 | ; @r{restored the local value in buffer @samp{a}} |
| 1211 | @end group | 1213 | @end group |
| 1212 | @group | 1214 | @group |
| 1213 | (set-buffer "a") | 1215 | (set-buffer "a") ; @r{This can be seen here:} |
| 1214 | foo @result{} 'temp ; @r{The local @code{let} value that should be gone} | 1216 | foo @result{} 'a ; @r{we are back to the local value in buffer @samp{a}} |
| 1215 | ; @r{is now the buffer-local value in buffer @samp{a}.} | ||
| 1216 | @end group | 1217 | @end group |
| 1217 | @end example | 1218 | @end example |
| 1218 | 1219 | ||