Commit 186f7f0b authored by Kenichi Handa's avatar Kenichi Handa

Enable display mode of MIME message in rmail.

parent e1a23575
...@@ -72,6 +72,27 @@ Bazaar recognizes the headers "Author", "Date" and "Fixes". ...@@ -72,6 +72,27 @@ Bazaar recognizes the headers "Author", "Date" and "Fixes".
Git, Mercurial, and Monotone recognize "Author" and "Date". Git, Mercurial, and Monotone recognize "Author" and "Date".
Any unknown header is left as is in the message, so it is not lost. Any unknown header is left as is in the message, so it is not lost.
** Rmail
** The default value of `rmail-enable-mime' is now t. Rmail decodes
MIME contents automatically. You can customize the variable
`rmail-enable-mime' back to `nil' to disable this automatic MIME
decoding.
** The command `rmail-mime' change the displaying of a MIME message
between decoded presentation form and raw data if `rmail-enable-mime'
is non-nil. And, with prefix argument, it change only the displaying
of the MIME entity at point.
** The new command TAB (rmail-mime-next-item) moves point to the next
item of MIME message.
** The new command backtab (rmail-mime-previous-item) moves point to
the previous item of MIME message.
** The new command RET (rmail-mime-toggle-hidden) hide or show the
body of the MIME entity at point.
** Obsolete packages ** Obsolete packages
+++ +++
......
2010-12-24 Kenichi Handa <handa@m17n.org>
* mail/rmailmm.el: New key bindings for rmail-mime-next-item,
rmail-mime-previous-item, and rmail-mime-toggle-hidden.
(rmail-mime-mbox-buffer)
(rmail-mime-view-buffer, rmail-mime-coding-system): New variables.
(rmail-mime-entity): Argument changed. All codes handling an
entity object are changed.
(rmail-mime-entity-header, rmail-mime-entity-body): Adjusted for
the above change.
(rmail-mime-entity-children, rmail-mime-entity-handler)
(rmail-mime-entity-tagline): New functions.
(rmail-mime-message-p): New function.
(rmail-mime-save): Bind rmail-mime-mbox-buffer.
(rmail-mime-entity-segment, rmail-mime-next-item)
(rmail-mime-previous-item, rmail-mime-shown-mode)
(rmail-mime-hidden-mode, rmail-mime-raw-mode)
(rmail-mime-toggle-raw, rmail-mime-toggle-hidden)
(rmail-mime-insert-tagline, rmail-mime-insert-header): New
functions.
(rmail-mime-text-handler): Call rmail-mime-insert-text.
(rmail-mime-insert-decoded-text): New function.
(rmail-mime-insert-text): Call rmail-mime-insert-decoded-text.
(rmail-mime-insert-image): Argument changed. Caller changed.
(rmail-mime-image): Call rmail-mime-toggle-hidden.
(rmail-mime-set-bulk-data): New funciton.
(rmail-mime-insert-bulk): Argument changed.
(rmail-mime-multipart-handler): Return t.
(rmail-mime-process-multipart): Argument changed. Handle
"multipart/alternative" here.
(rmail-mime-process): Argument changed.
(rmail-mime-parse): Bind rmail-mime-mbox-buffer.
(rmail-mime-insert): Argument changed. Handle raw display mode.
(rmail-mime): Argument changed. Handle toggling of raw display
mode.
(rmail-show-mime): Bind rmail-mime-mbox-buffer and
rmail-mime-view-buffer.
(rmail-insert-mime-forwarded-message): Likewise.
(rmail-search-mime-message): Likewise. Don't bind rmail-buffer.
* mail/rmail.el (rmail-show-message-1): If rmail-enable-mime is
non-nil, handle the header in rmail-show-mime-function.
2010-12-20 Leo <sdl.web@gmail.com> 2010-12-20 Leo <sdl.web@gmail.com>
* help-fns.el (describe-variable): Fix 2010-12-17 change. * help-fns.el (describe-variable): Fix 2010-12-17 change.
......
...@@ -2691,75 +2691,72 @@ The current mail message becomes the message displayed." ...@@ -2691,75 +2691,72 @@ The current mail message becomes the message displayed."
(message "Showing message %d" msg)) (message "Showing message %d" msg))
(narrow-to-region beg end) (narrow-to-region beg end)
(goto-char beg) (goto-char beg)
(if (and rmail-enable-mime
(re-search-forward "mime-version: 1.0" nil t))
(let ((rmail-buffer mbox-buf)
(rmail-view-buffer view-buf))
(funcall rmail-show-mime-function))
(setq body-start (search-forward "\n\n" nil t))
(narrow-to-region beg (point))
(goto-char beg)
(save-excursion
(if (re-search-forward "^X-Coding-System: *\\(.*\\)$" nil t)
(setq coding-system (intern (match-string 1)))
(setq coding-system (rmail-get-coding-system))))
(setq character-coding (mail-fetch-field "content-transfer-encoding")
is-text-message (rmail-is-text-p))
(if character-coding
(setq character-coding (downcase character-coding)))
(narrow-to-region beg end)
;; Decode the message body into an empty view buffer using a
;; unibyte temporary buffer where the character decoding takes
;; place.
(with-current-buffer rmail-view-buffer
(erase-buffer))
(if (null character-coding)
;; Do it directly since that is fast.
(rmail-decode-region body-start end coding-system view-buf)
;; Can this be done directly, skipping the temp buffer?
(with-temp-buffer
(set-buffer-multibyte nil)
(insert-buffer-substring mbox-buf body-start end)
(cond
((string= character-coding "quoted-printable")
;; See bug#5441.
(or (mail-unquote-printable-region (point-min) (point-max)
nil t 'unibyte)
(message "Malformed MIME quoted-printable message")))
((and (string= character-coding "base64") is-text-message)
(condition-case err
(base64-decode-region (point-min) (point-max))
(error (message "%s" (cdr err)))))
((eq character-coding 'uuencode)
(error "uuencoded messages are not supported yet"))
(t))
(rmail-decode-region (point-min) (point-max)
coding-system view-buf))))
(with-current-buffer rmail-view-buffer (with-current-buffer rmail-view-buffer
;; We give the view buffer a buffer-local value of ;; We give the view buffer a buffer-local value of
;; rmail-header-style based on the binding in effect when ;; rmail-header-style based on the binding in effect when
;; this function is called; `rmail-toggle-headers' can ;; this function is called; `rmail-toggle-headers' can
;; inspect this value to determine how to toggle. ;; inspect this value to determine how to toggle.
(set (make-local-variable 'rmail-header-style) header-style) (set (make-local-variable 'rmail-header-style) header-style))
;; Unquote quoted From lines (if (and rmail-enable-mime
(goto-char (point-min)) (re-search-forward "mime-version: 1.0" nil t))
(while (re-search-forward "^>+From " nil t) (let ((rmail-buffer mbox-buf)
(beginning-of-line) (rmail-view-buffer view-buf))
(delete-char 1) (funcall rmail-show-mime-function))
(forward-line)) (setq body-start (search-forward "\n\n" nil t))
(goto-char (point-min))) (narrow-to-region beg (point))
;; Copy the headers to the front of the message view buffer. (goto-char beg)
(rmail-copy-headers beg end) (save-excursion
;; Add the separator (blank line) between headers and body; (if (re-search-forward "^X-Coding-System: *\\(.*\\)$" nil t)
(setq coding-system (intern (match-string 1)))
(setq coding-system (rmail-get-coding-system))))
(setq character-coding (mail-fetch-field "content-transfer-encoding")
is-text-message (rmail-is-text-p))
(if character-coding
(setq character-coding (downcase character-coding)))
(narrow-to-region beg end)
;; Decode the message body into an empty view buffer using a
;; unibyte temporary buffer where the character decoding takes
;; place.
(with-current-buffer rmail-view-buffer
(erase-buffer))
(if (null character-coding)
;; Do it directly since that is fast.
(rmail-decode-region body-start end coding-system view-buf)
;; Can this be done directly, skipping the temp buffer?
(with-temp-buffer
(set-buffer-multibyte nil)
(insert-buffer-substring mbox-buf body-start end)
(cond
((string= character-coding "quoted-printable")
;; See bug#5441.
(or (mail-unquote-printable-region (point-min) (point-max)
nil t 'unibyte)
(message "Malformed MIME quoted-printable message")))
((and (string= character-coding "base64") is-text-message)
(condition-case err
(base64-decode-region (point-min) (point-max))
(error (message "%s" (cdr err)))))
((eq character-coding 'uuencode)
(error "uuencoded messages are not supported yet"))
(t))
(rmail-decode-region (point-min) (point-max)
coding-system view-buf)))
(with-current-buffer rmail-view-buffer
;; Prepare the separator (blank line) before the body.
(goto-char (point-min))
(insert "\n")
;; Unquote quoted From lines
(while (re-search-forward "^>+From " nil t)
(beginning-of-line)
(delete-char 1)
(forward-line))
(goto-char (point-min)))
;; Copy the headers to the front of the message view buffer.
(rmail-copy-headers beg end))
;; highlight the message, activate any URL like text and add ;; highlight the message, activate any URL like text and add
;; special highlighting for and quoted material. ;; special highlighting for and quoted material.
(with-current-buffer rmail-view-buffer (with-current-buffer rmail-view-buffer
(insert "\n")
(goto-char (point-min)) (goto-char (point-min))
;; Decode the headers according to RFC2047.
(save-excursion
(search-forward "\n\n" nil 'move)
(rfc2047-decode-region (point-min) (point)))
(rmail-highlight-headers) (rmail-highlight-headers)
;(rmail-activate-urls) ;(rmail-activate-urls)
;(rmail-process-quoted-material) ;(rmail-process-quoted-material)
...@@ -4290,18 +4287,28 @@ With prefix argument N moves forward N messages with these labels. ...@@ -4290,18 +4287,28 @@ With prefix argument N moves forward N messages with these labels.
;;;*** ;;;***
;;;### (autoloads (rmail-mime) "rmailmm" "rmailmm.el" "222ca7c1e672a08e5799e5a72fb25049") ;;;### (autoloads (rmail-mime) "rmailmm" "rmailmm.el" "faa9e26c7781c426785e671a040128ad")
;;; Generated autoloads from rmailmm.el ;;; Generated autoloads from rmailmm.el
(autoload 'rmail-mime "rmailmm" "\ (autoload 'rmail-mime "rmailmm" "\
Process the current Rmail message as a MIME message. Toggle displaying of a MIME message.
This creates a temporary \"*RMAIL*\" buffer holding a decoded
copy of the message. Inline content-types are handled according to The actualy behavior depends on the value of `rmail-enable-mime'.
If `rmail-enable-mime' is t (default), this command change the
displaying of a MIME message between decoded presentation form
and raw data.
With ARG, toggle the displaying of the current MIME entity only.
If `rmail-enable-mime' is nil, this creates a temporary
\"*RMAIL*\" buffer holding a decoded copy of the message. Inline
content-types are handled according to
`rmail-mime-media-type-handlers-alist'. By default, this `rmail-mime-media-type-handlers-alist'. By default, this
displays text and multipart messages, and offers to download displays text and multipart messages, and offers to download
attachments as specfied by `rmail-mime-attachment-dirs-alist'. attachments as specfied by `rmail-mime-attachment-dirs-alist'.
\(fn)" t nil) \(fn &optional ARG)" t nil)
;;;*** ;;;***
......
This diff is collapsed.
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