Next: what-line, Previous: Narrowing advantages, Up: Narrowing & Widening [Contents][Index]
save-restriction
Special FormIn Emacs Lisp, you can use the save-restriction
special form to keep
track of whatever narrowing is in effect, if any. When the Lisp interpreter
meets with save-restriction
, it executes the code in the body of the
save-restriction
expression, and then undoes any changes to narrowing
that the code caused. If, for example, the buffer is narrowed and the code
that follows save-restriction
gets rid of the narrowing,
save-restriction
returns the buffer to its narrowed region
afterwards. In the what-line
command, any narrowing the buffer may
have is undone by the widen
command that immediately follows the
save-restriction
command. Any original narrowing is restored just
before the completion of the function.
The template for a save-restriction
expression is simple:
(save-restriction body… )
The body of the save-restriction
is one or more expressions that will
be evaluated in sequence by the Lisp interpreter.
Finally, a point to note: when you use both save-excursion
and
save-restriction
, one right after the other, you should use
save-excursion
outermost. If you write them in reverse order, you
may fail to record narrowing in the buffer to which Emacs switches after
calling save-excursion
. Thus, when written together,
save-excursion
and save-restriction
should be written like
this:
(save-excursion (save-restriction body…))
In other circumstances, when not written together, the save-excursion
and save-restriction
special forms must be written in the order
appropriate to the function.
たとえば
(save-restriction (widen) (save-excursion body…))