From: Katsumi Yamaoka Date: Mon, 10 May 2010 07:23:32 +0000 (+0000) Subject: (mm-with-unibyte-current-buffer): Redefine it so as not to bind the default X-Git-Url: http://cgit.sxemacs.org/?p=gnus;a=commitdiff_plain;h=4d086f55c7e3e15255ad001200cd8a4ad972d684 (mm-with-unibyte-current-buffer): Redefine it so as not to bind the default value of enable-multibyte-characters to nil. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 78c7023f2..5109a0cbb 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -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 --git a/lisp/mm-util.el b/lisp/mm-util.el index a288b8b1b..fe7fd78af 100644 --- a/lisp/mm-util.el +++ b/lisp/mm-util.el @@ -1230,33 +1230,23 @@ Use multibyte mode for this." (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 - -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)." +Equivalent to `progn' in XEmacs. + +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))