[Top][All Lists]
[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)
- Re: [Unicode-2] `read' always returns multibyte symbol, (continued)
- Re: [Unicode-2] `read' always returns multibyte symbol, Katsumi Yamaoka, 2007/11/15
- Re: [Unicode-2] `read' always returns multibyte symbol, Kenichi Handa, 2007/11/15
- Re: [Unicode-2] `read' always returns multibyte symbol, Katsumi Yamaoka, 2007/11/15
- Re: [Unicode-2] `read' always returns multibyte symbol, Kenichi Handa, 2007/11/15
- Re: [Unicode-2] `read' always returns multibyte symbol, Katsumi Yamaoka, 2007/11/15
- Re: [Unicode-2] `read' always returns multibyte symbol, Kenichi Handa, 2007/11/15
- Re: [Unicode-2] `read' always returns multibyte symbol, Katsumi Yamaoka, 2007/11/15
- Re: [Unicode-2] `read' always returns multibyte symbol,
Stefan Monnier <=
- Re: [Unicode-2] `read' always returns multibyte symbol, Stefan Monnier, 2007/11/15
- Re: [Unicode-2] `read' always returns multibyte symbol, Kenichi Handa, 2007/11/15
- Re: [Unicode-2] `read' always returns multibyte symbol, Eli Zaretskii, 2007/11/16
Re: [Unicode-2] `read' always returns multibyte symbol, Stefan Monnier, 2007/11/13