Mercurial > emacs
changeset 50336:15141bb6dc1f
(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'.
author | John Paul Wallington <jpw@pobox.com> |
---|---|
date | Sat, 29 Mar 2003 02:56:35 +0000 |
parents | 0d468249dd37 |
children | f4504bc1f3bf |
files | lisp/international/mule.el |
diffstat | 1 files changed, 17 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- 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.