+(defmacro mm-with-unibyte-current-buffer (&rest forms)
+ "Evaluate FORMS with current current buffer temporarily made unibyte.
+Also bind `default-enable-multibyte-characters' to nil.
+Equivalent to `progn' in XEmacs"
+ (let ((buffer (make-symbol "buffer")))
+ `(if (and (not (featurep 'xemacs))
+ (boundp 'enable-multibyte-characters)
+ enable-multibyte-characters
+ (fboundp 'set-buffer-multibyte))
+ (let ((,buffer (current-buffer)))
+ (unwind-protect
+ (let (default-enable-multibyte-characters)
+ (set-buffer-multibyte nil)
+ ,@forms)
+ (set-buffer ,buffer)
+ (set-buffer-multibyte t)))
+ (let (default-enable-multibyte-characters)
+ ,@forms))))
+(put 'mm-with-unibyte-current-buffer 'lisp-indent-function 0)
+(put 'mm-with-unibyte-current-buffer 'edebug-form-spec '(body))
+
+(defmacro mm-with-unibyte-current-buffer-mule4 (&rest forms)
+ "Evaluate FORMS there like `progn' in current buffer.
+Mule4 only."
+ (let ((buffer (make-symbol "buffer")))
+ `(if (and (not (featurep 'xemacs))
+ (boundp 'enable-multibyte-characters)
+ enable-multibyte-characters
+ (fboundp 'set-buffer-multibyte)
+ (fboundp 'charsetp)
+ (not (charsetp 'eight-bit-control))) ;; For Emacs Mule 4 only.
+ (let ((,buffer (current-buffer)))
+ (unwind-protect
+ (let (default-enable-multibyte-characters)
+ (set-buffer-multibyte nil)
+ ,@forms)
+ (set-buffer ,buffer)
+ (set-buffer-multibyte t)))
+ (let (default-enable-multibyte-characters)
+ ,@forms))))
+(put 'mm-with-unibyte-current-buffer-mule4 'lisp-indent-function 0)
+(put 'mm-with-unibyte-current-buffer-mule4 'edebug-form-spec '(body))
+
+(defmacro mm-with-unibyte (&rest forms)
+ "Eval the FORMS with the default value of `enable-multibyte-characters' nil, ."
+ `(let (default-enable-multibyte-characters)
+ ,@forms))
+(put 'mm-with-unibyte 'lisp-indent-function 0)
+(put 'mm-with-unibyte 'edebug-form-spec '(body))
+