From: Gerd Moellmann Date: Tue, 16 Nov 1999 13:29:51 +0000 (+0000) Subject: (with-syntax-table): New. X-Git-Tag: emacs-pretest-21.0.90~6083 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=d01a33cf8d8855f935b5e93145ab8e5cfb99f598;p=emacs.git (with-syntax-table): New. --- diff --git a/lisp/simple.el b/lisp/simple.el index b65e8b2ff99..279a76ad713 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -27,6 +27,10 @@ ;;; Code: +(eval-when-compile + (require 'cl)) + + (defgroup killing nil "Killing and yanking commands" :group 'editing) @@ -4132,4 +4136,21 @@ after it has been set up properly in other respects." (if display-flag (pop-to-buffer new)) new)) + +(defmacro with-syntax-table (table &rest body) + "Evaluate BODY with syntax table of current buffer set to a copy of TABLE. +Point, mark, current buffer, and syntax table are saved, BODY is +evaluated, and the saved values are restored, even in case of an +abnormal exit. Value is what BODY returns." + (let ((old-table (gensym))) + '(let ((,old-table (syntax-table))) + (unwind-protect + (save-excursion + (set-syntax-table (copy-syntax-table ,table)) + ,@body) + (set-syntax-table ,old-table))))) + +(put 'with-syntax-table 'lisp-indent-function 1) +(put 'with-syntax-table 'edebug-form-spec '(form body)) + ;;; simple.el ends here