# HG changeset patch # User John Paul Wallington # Date 1048906595 0 # Node ID 15141bb6dc1f93167e7396bba2ffd54679225d83 # Parent 0d468249dd37d110d25f9fd2d0a990f95f69afb1 (with-category-table): Use `make-symbol' to avoid variable capture. Set table within `unwind-protect'. Ensure table is restored in correct buffer. Add docstring. Basically, copy `with-syntax-table'. diff -r 0d468249dd37 -r 15141bb6dc1f lisp/international/mule.el --- a/lisp/international/mule.el Sat Mar 29 02:35:08 2003 +0000 +++ b/lisp/international/mule.el Sat Mar 29 02:56:35 2003 +0000 @@ -593,7 +593,7 @@ (make-char charset (+ i start) (+ start chars -1))))))) (defun register-char-codings (coding-system safe-chars) - "This is an obsolete function. + "This is an obsolete function. It exists just for backward compatibility, and it does nothing.") (make-obsolete 'register-char-codings "Unnecessary function. Calling it has no effect." @@ -1985,12 +1985,22 @@ (put 'with-category-table 'lisp-indent-function 1) -(defmacro with-category-table (category-table &rest body) - `(let ((current-category-table (category-table))) - (set-category-table ,category-table) - (unwind-protect - (progn ,@body) - (set-category-table current-category-table)))) +(defmacro with-category-table (table &rest body) + "Evaluate BODY with category table of current buffer set to TABLE. +The category table of the current buffer is saved, BODY is evaluated, +then the saved table is restored, even in case of an abnormal exit. +Value is what BODY returns." + (let ((old-table (make-symbol "old-table")) + (old-buffer (make-symbol "old-buffer"))) + `(let ((,old-table (category-table)) + (,old-buffer (current-buffer))) + (unwind-protect + (progn + (set-category-table ,table) + ,@body) + (save-current-buffer + (set-buffer ,old-buffer) + (set-category-table ,old-table)))))) (defun define-translation-hash-table (symbol table) "Define SYMBOL as the name of the hash translation TABLE for use in CCL.