GNU Info

Info Node: (emacs-lisp-intro.info)save-restriction

(emacs-lisp-intro.info)save-restriction


Next: what-line Prev: Narrowing advantages Up: Narrowing & Widening
Enter node , (file) or (file)node

The `save-restriction' Special Form
===================================

   In 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.

   For example,

       (save-restriction
         (widen)
         (save-excursion
         BODY...))


automatically generated by info2www version 1.2.2.9