Commit 1a6a03e4 authored by Kenichi Handa's avatar Kenichi Handa

Fix setting of buffer-file-coding-system of RMAIL buffer.

parent 07ee9351
2011-01-14 Kenichi Handa <handa@m17n.org>
* mail/rmailmm.el (rmail-mime-insert-header): Set
rmail-mime-coding-system to a cons whose car is the last coding
system used to decode the header.
(rmail-mime-find-header-encoding): New function.
(rmail-mime-insert-decoded-text): Override
rmail-mime-coding-system if it is a cons.
(rmail-show-mime): If only a header part was decoded, find the
coding system while ignoring mm-charset-override-alist.
2011-01-12 Kenichi Handa <handa@m17n.org> 2011-01-12 Kenichi Handa <handa@m17n.org>
* mail/rmailmm.el (rmail-mime-next-item) * mail/rmailmm.el (rmail-mime-next-item)
......
...@@ -460,12 +460,27 @@ See `rmail-mime-entity' for the detail." ...@@ -460,12 +460,27 @@ See `rmail-mime-entity' for the detail."
(rmail-copy-headers (point) (aref header 1))))) (rmail-copy-headers (point) (aref header 1)))))
(rfc2047-decode-region pos (point)) (rfc2047-decode-region pos (point))
(if (and last-coding-system-used (not rmail-mime-coding-system)) (if (and last-coding-system-used (not rmail-mime-coding-system))
(setq rmail-mime-coding-system last-coding-system-used)) (setq rmail-mime-coding-system (cons last-coding-system-used nil)))
(goto-char (point-min)) (goto-char (point-min))
(rmail-highlight-headers) (rmail-highlight-headers)
(goto-char (point-max)) (goto-char (point-max))
(insert "\n")))) (insert "\n"))))
(defun rmail-mime-find-header-encoding (header)
"Retun the last coding system used to decode HEADER.
HEADER is a header component of a MIME-entity object (see
`rmail-mime-entity')."
(with-temp-buffer
(let ((last-coding-system-used nil))
(with-current-buffer rmail-mime-mbox-buffer
(let ((rmail-buffer rmail-mime-mbox-buffer)
(rmail-view-buffer rmail-mime-view-buffer))
(save-excursion
(goto-char (aref header 0))
(rmail-copy-headers (point) (aref header 1)))))
(rfc2047-decode-region (point-min) (point-max))
last-coding-system-used)))
(defun rmail-mime-text-handler (content-type (defun rmail-mime-text-handler (content-type
content-disposition content-disposition
content-transfer-encoding) content-transfer-encoding)
...@@ -498,7 +513,7 @@ See `rmail-mime-entity' for the detail." ...@@ -498,7 +513,7 @@ See `rmail-mime-entity' for the detail."
((string= transfer-encoding "quoted-printable") ((string= transfer-encoding "quoted-printable")
(quoted-printable-decode-region pos (point)))))) (quoted-printable-decode-region pos (point))))))
(decode-coding-region pos (point) coding-system) (decode-coding-region pos (point) coding-system)
(or rmail-mime-coding-system (if (or (not rmail-mime-coding-system) (consp rmail-mime-coding-system))
(setq rmail-mime-coding-system coding-system)) (setq rmail-mime-coding-system coding-system))
(or (bolp) (insert "\n")))) (or (bolp) (insert "\n"))))
...@@ -1274,8 +1289,19 @@ attachments as specfied by `rmail-mime-attachment-dirs-alist'." ...@@ -1274,8 +1289,19 @@ attachments as specfied by `rmail-mime-attachment-dirs-alist'."
(with-current-buffer rmail-mime-view-buffer (with-current-buffer rmail-mime-view-buffer
(erase-buffer) (erase-buffer)
(rmail-mime-insert entity) (rmail-mime-insert entity)
(if rmail-mime-coding-system (if (consp rmail-mime-coding-system)
(set-buffer-file-coding-system rmail-mime-coding-system t t))) ;; Decoding is done by rfc2047-decode-region only for a
;; header. But, as the used coding system may have been
;; overriden by mm-charset-override-alist, we can't
;; trust (car rmail-mime-coding-system). So, here we
;; try the decoding again with mm-charset-override-alist
;; bound to nil.
(let ((mm-charset-override-alist nil))
(setq rmail-mime-coding-system
(rmail-mime-find-header-encoding
(rmail-mime-entity-header entity)))))
(set-buffer-file-coding-system
(coding-system-base rmail-mime-coding-system) t t))
;; Decoding failed. ENTITY is an error message. Insert the ;; Decoding failed. ENTITY is an error message. Insert the
;; original message body as is, and show warning. ;; original message body as is, and show warning.
(let ((region (with-current-buffer rmail-mime-mbox-buffer (let ((region (with-current-buffer rmail-mime-mbox-buffer
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment