emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Unicode-2] `read' always returns multibyte symbol


From: Stefan Monnier
Subject: Re: [Unicode-2] `read' always returns multibyte symbol
Date: Thu, 15 Nov 2007 21:51:16 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.50 (gnu/linux)

> I see.  In relation to this, I've been wanting to exterminate
> the `mm-with-unibyte-current-buffer' macro that Gnus uses here
> and there (if you have time, please look at how it is evil, in
> mm-util.el).

Yes, I spotted it a while ago already (I'm using a few local hacks to
try and catch some multi/unibyte abuses so I tend to bump into bugs
a bit earlier than in normal use).

I think a mistake of Emacs's handling of encoding issues is that we use
"unibyte" and "multibyte" rather than "byteS" and chars".


        Stefan


PS: Here are some hunks from my local changes.


@@ -1034,16 +1068,18 @@
 (defmacro mm-with-unibyte-buffer (&rest forms)
   "Create a temporary buffer, and evaluate FORMS there like `progn'.
 Use unibyte mode for this."
-  `(let (default-enable-multibyte-characters)
-     (with-temp-buffer ,@forms)))
+  `(with-temp-buffer
+     (mm-disable-multibyte)
+     ,@forms))
 (put 'mm-with-unibyte-buffer 'lisp-indent-function 0)
 (put 'mm-with-unibyte-buffer 'edebug-form-spec '(body))
 
 (defmacro mm-with-multibyte-buffer (&rest forms)
   "Create a temporary buffer, and evaluate FORMS there like `progn'.
 Use multibyte mode for this."
-  `(let ((default-enable-multibyte-characters t))
-     (with-temp-buffer ,@forms)))
+  `(with-temp-buffer
+     (mm-enable-multibyte)
+     ,@forms))
 (put 'mm-with-multibyte-buffer 'lisp-indent-function 0)
 (put 'mm-with-multibyte-buffer 'edebug-form-spec '(body))
 
@@ -1058,24 +1094,29 @@
 harmful since it is likely to modify existing data in the buffer.
 For instance, it converts \"\\300\\255\" into \"\\255\" in
 Emacs 23 (unicode)."
-  (let ((multibyte (make-symbol "multibyte"))
-       (buffer (make-symbol "buffer")))
-    `(if mm-emacs-mule
-        (let ((,multibyte enable-multibyte-characters)
-              (,buffer (current-buffer)))
-          (unwind-protect
-              (let (default-enable-multibyte-characters)
-                (set-buffer-multibyte nil)
-                ,@forms)
-            (set-buffer ,buffer)
-            (set-buffer-multibyte ,multibyte)))
-       (let (default-enable-multibyte-characters)
-        ,@forms))))
+  (message "Braindeadly defined macro: mm-with-unibyte-current-buffer")
+  ;; (let ((multibyte (make-symbol "multibyte"))
+  ;;       (buffer (make-symbol "buffer")))
+  ;;   `(if mm-emacs-mule
+  ;;        (let ((,multibyte enable-multibyte-characters)
+  ;;              (,buffer (current-buffer)))
+  ;;          (unwind-protect
+  ;;              (let (default-enable-multibyte-characters)
+  ;;            (set-buffer-multibyte nil)
+  ;;            ,@forms)
+  ;;            (set-buffer ,buffer)
+  ;;            (set-buffer-multibyte ,multibyte)))
+  ;;      (let (default-enable-multibyte-characters)
+  ;;        ,@forms)))
+  `(progn (assert (not 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 (&rest forms)
   "Eval the FORMS with the default value of `enable-multibyte-characters' nil."
+  (message "Braindead macro: mm-with-unibyte")
   `(let (default-enable-multibyte-characters)
      ,@forms))
 (put 'mm-with-unibyte 'lisp-indent-function 0)
@@ -1083,6 +1124,7 @@
 
 (defmacro mm-with-multibyte (&rest forms)
   "Eval the FORMS with the default value of `enable-multibyte-characters' t."
+  (message "Braindead macro: mm-with-multibyte")
   `(let ((default-enable-multibyte-characters t))
      ,@forms))
 (put 'mm-with-multibyte 'lisp-indent-function 0)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]