changeset 108392:7642d075642b

Synch with Gnus trunk. (mm-with-unibyte-current-buffer): Redefine it so as not to bind the default value of enable-multibyte-characters to nil.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Mon, 10 May 2010 07:26:12 +0000
parents 3103a7f3cca6 (current diff) 5e0883e3a3b7 (diff)
children 5b2cee3284b0 a30c85fa75e8
files
diffstat 2 files changed, 19 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/gnus/ChangeLog	Mon May 10 03:40:12 2010 +0000
+++ b/lisp/gnus/ChangeLog	Mon May 10 07:26:12 2010 +0000
@@ -1,3 +1,8 @@
+2010-05-10  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+	* mm-util.el (mm-with-unibyte-current-buffer): Redefine it so as not to
+	bind the default value of enable-multibyte-characters to nil.
+
 2010-05-10  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* message.el (message-forward-make-body-plain)
--- a/lisp/gnus/mm-util.el	Mon May 10 03:40:12 2010 +0000
+++ b/lisp/gnus/mm-util.el	Mon May 10 07:26:12 2010 +0000
@@ -1230,33 +1230,23 @@
 
 (defmacro mm-with-unibyte-current-buffer (&rest forms)
   "Evaluate FORMS with current buffer temporarily made unibyte.
-Also bind the default-value of `enable-multibyte-characters' to nil.
-Equivalent to `progn' in XEmacs
+Equivalent to `progn' in XEmacs.
 
-NOTE: Use this macro with caution in multibyte buffers (it is not
-worth using this macro in unibyte buffers of course).  Use of
-`(set-buffer-multibyte t)', which is run finally, is generally
-harmful since it is likely to modify existing data in the buffer.
-For instance, it converts \"\\300\\255\" into \"\\255\" in
-Emacs 23 (unicode)."
+Note: We recommend not using this macro any more; there should be
+better ways to do a similar thing.  The previous version of this macro
+bound the default value of `enable-multibyte-characters' to nil while
+evaluating FORMS but it is no longer done.  So, some programs assuming
+it if any may malfunction."
   (if (featurep 'xemacs)
       `(progn ,@forms)
-    ;; FIXME: (default-value 'enable-multibyte-characters) is read-only
-    ;; so let-binding it is wrong.  The right fix is to not use this
-    ;; macro at all any more, since it's been ill-defined from the start.
-    (let ((multibyte (make-symbol "multibyte"))
-	  (buffer (make-symbol "buffer")))
-      `(if mm-emacs-mule
-	   (let ((,multibyte enable-multibyte-characters)
-		 (,buffer (current-buffer)))
-	     (unwind-protect
-		 (letf (((default-value 'enable-multibyte-characters) nil))
-		       (set-buffer-multibyte nil)
-		       ,@forms)
-	       (set-buffer ,buffer)
-	       (set-buffer-multibyte ,multibyte)))
-	 (letf (((default-value 'enable-multibyte-characters) nil))
-	       ,@forms)))))
+    (let ((multibyte (make-symbol "multibyte")))
+      `(let ((,multibyte enable-multibyte-characters))
+	 (when ,multibyte
+	   (set-buffer-multibyte nil))
+	 (prog1
+	     (progn ,@forms)
+	   (when ,multibyte
+	     (set-buffer-multibyte t)))))))
 (put 'mm-with-unibyte-current-buffer 'lisp-indent-function 0)
 (put 'mm-with-unibyte-current-buffer 'edebug-form-spec '(body))