# HG changeset patch # User Katsumi Yamaoka # Date 1273476327 0 # Node ID 5e0883e3a3b7d93e7e003f082e16e80a556cf966 # Parent 1582267d4b39c60a04f1f8d4bc7348c8080038f9 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. diff -r 1582267d4b39 -r 5e0883e3a3b7 lisp/gnus/ChangeLog --- a/lisp/gnus/ChangeLog Mon May 10 07:13:43 2010 +0000 +++ b/lisp/gnus/ChangeLog Mon May 10 07:25:27 2010 +0000 @@ -1,3 +1,8 @@ +2010-05-10 Katsumi Yamaoka + + * 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 * message.el (message-forward-make-body-plain) diff -r 1582267d4b39 -r 5e0883e3a3b7 lisp/gnus/mm-util.el --- a/lisp/gnus/mm-util.el Mon May 10 07:13:43 2010 +0000 +++ b/lisp/gnus/mm-util.el Mon May 10 07:25:27 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))