]> git.eshelyaron.com Git - emacs.git/commitdiff
(with-syntax-table): Moved from simple.el.
authorRichard M. Stallman <rms@gnu.org>
Wed, 12 Jan 2000 03:04:55 +0000 (03:04 +0000)
committerRichard M. Stallman <rms@gnu.org>
Wed, 12 Jan 2000 03:04:55 +0000 (03:04 +0000)
lisp/subr.el

index f90d0d9da051bf87f80b98a36a27194a73c3b9f7..683bc2479419b1fa1df354c5bc609cfed2356887 100644 (file)
@@ -1060,6 +1060,22 @@ in BODY."
         . ,body)
      (combine-after-change-execute)))
 
+(defmacro with-syntax-table (table &rest body)
+  "Evaluate BODY with syntax table of current buffer set to a copy of TABLE.
+The syntax table of the current buffer is saved, BODY is evaluated, and the
+saved table is restored, even in case of an abnormal exit.
+Value is what BODY returns."
+  (let ((old-table (gensym))
+       (old-buffer (gensym)))
+    `(let ((,old-table (syntax-table))
+          (,old-buffer (current-buffer)))
+       (unwind-protect
+          (progn
+            (set-syntax-table (copy-syntax-table ,table))
+            ,@body)
+        (save-current-buffer
+          (set-buffer ,old-buffer)
+          (set-syntax-table ,old-table))))))
 \f
 (defvar save-match-data-internal)