instead of Content-Disposition header.
(gnus-mime-inline-part): Ditto.
(gnus-mime-view-part-as-charset): Ignore charset that the part specifies.
* mm-decode.el (mm-display-part): Work with external parts and usual parts
similarly.
* mm-extern.el (mm-inline-external-body): Use mm-display-part instead of
gnus-display-mime.
* mm-util.el (mm-decompress-buffer): Use mm-with-unibyte-buffer instead of
with-temp-buffer.
* gnus-uu.el (gnus-uu-save-article): Put mml tags instead of part tag to
summarized topics part in order to encode non-ASCII text.
;; From Kenichi Handa.
* rfc2231.el (rfc2231-decode-encoded-string): Work on unibyte buffer and then
decode the buffer text if necessary.
(rfc2231-encode-string): Be sure to work on multibyte buffer at first, and
after mm-encode-body, change the buffer to unibyte.
+2006-04-12 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-mime-copy-part): Find name parameter in
+ Content-Type header instead of Content-Disposition header.
+ (gnus-mime-inline-part): Ditto.
+ (gnus-mime-view-part-as-charset): Ignore charset that the part
+ specifies.
+
+ * mm-decode.el (mm-display-part): Work with external parts and
+ usual parts similarly.
+
+ * mm-extern.el (mm-inline-external-body): Use mm-display-part
+ instead of gnus-display-mime.
+
+ * mm-util.el (mm-decompress-buffer): Use mm-with-unibyte-buffer
+ instead of with-temp-buffer.
+
+ * gnus-uu.el (gnus-uu-save-article): Put mml tags instead of part
+ tag to summarized topics part in order to encode non-ASCII text.
+
+2006-04-12 Kenichi Handa <handa@m17n.org>
+
+ * rfc2231.el (rfc2231-decode-encoded-string): Work on unibyte
+ buffer and then decode the buffer text if necessary.
+ (rfc2231-encode-string): Be sure to work on multibyte buffer at
+ first, and after mm-encode-body, change the buffer to unibyte.
+
2006-04-11 Reiner Steib <Reiner.Steib@gmx.de>
* smiley.el (smiley-style): New variable.
(unless handle
(setq handle (get-text-property (point) 'gnus-data)))
(when handle
- (let ((filename (or (mail-content-type-get (mm-handle-disposition handle)
+ (let ((filename (or (mail-content-type-get (mm-handle-type handle)
'name)
(mail-content-type-get (mm-handle-disposition handle)
'filename)))
(mm-insert-part handle)
(setq contents
(or (mm-decompress-buffer
- (or (mail-content-type-get (mm-handle-disposition handle)
+ (or (mail-content-type-get (mm-handle-type handle)
'name)
(mail-content-type-get (mm-handle-disposition handle)
'filename))
specified charset."
(interactive (list nil current-prefix-arg))
(gnus-article-check-buffer)
- (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
- contents charset
- (b (point))
- (inhibit-read-only t))
+ (let ((handle (or handle (get-text-property (point) 'gnus-data)))
+ (fun (get-text-property (point) 'gnus-callback))
+ (gnus-newsgroup-ignored-charsets 'gnus-all)
+ gnus-newsgroup-charset type charset)
(when handle
(if (mm-handle-undisplayer handle)
(mm-remove-part handle))
- (let ((gnus-newsgroup-charset
- (or (cdr (assq arg
- gnus-summary-show-article-charset-alist))
- (mm-read-coding-system "Charset: ")))
- (gnus-newsgroup-ignored-charsets 'gnus-all))
- (gnus-article-press-button)))))
+ (when fun
+ (setq gnus-newsgroup-charset
+ (or (cdr (assq arg gnus-summary-show-article-charset-alist))
+ (mm-read-coding-system "Charset: ")))
+ ;; Strip the charset parameter from `handle'.
+ (setq type (mm-handle-type
+ (if (equal (mm-handle-media-type handle)
+ "message/external-body")
+ (progn
+ (unless (mm-handle-cache handle)
+ (mm-extern-cache-contents handle))
+ (mm-handle-cache handle))
+ handle))
+ charset (assq 'charset (cdr type)))
+ (delq charset type)
+ (funcall fun handle)))))
(defun gnus-mime-view-part-externally (&optional handle)
"View the MIME part under point with an external viewer."
"Date: %s\nFrom: %s\nSubject: %s Digest\n\n"
(message-make-date) name name))
(when (and message-forward-as-mime gnus-uu-digest-buffer)
- (insert "<#part type=message/rfc822>\nSubject: Topics\n\n"))
+ (insert
+ "<#mml type=message/rfc822>\nSubject: Topics\n\n<#/mml>\n")
+ (forward-line -1))
(insert "Topics:\n")))
(when (not (eq in-state 'end))
(setq state (list 'middle))))
(mailcap-parse-mailcaps)
(if (mm-handle-displayed-p handle)
(mm-remove-part handle)
- (let* ((type (mm-handle-media-type handle))
+ (let* ((ehandle (if (equal (mm-handle-media-type handle)
+ "message/external-body")
+ (progn
+ (unless (mm-handle-cache handle)
+ (mm-extern-cache-contents handle))
+ (mm-handle-cache handle))
+ handle))
+ (type (mm-handle-media-type ehandle))
(method (mailcap-mime-info type))
(filename (or (mail-content-type-get
(mm-handle-disposition handle) 'filename)
(mm-handle-type handle) 'name)
"<file>"))
(external mm-enable-external))
- (if (and (mm-inlinable-p handle)
- (mm-inlined-p handle))
+ (if (and (mm-inlinable-p ehandle)
+ (mm-inlined-p ehandle))
(progn
(forward-line 1)
(mm-display-inline handle)
(when (or method
(not no-default))
(if (and (not method)
- (equal "text" (car (split-string type))))
+ (equal "text" (car (split-string type "/"))))
(progn
(forward-line 1)
(mm-insert-inline handle (mm-get-part handle))
(save-excursion
(save-restriction
(narrow-to-region (point) (point))
- (let* ((type (regexp-quote
- (mm-handle-media-type (mm-handle-cache handle))))
- ;; Force the part to be displayed (but if there is no
- ;; method to display, a user will be prompted to save).
- ;; See `gnus-mime-display-single'.
- (mm-inline-override-types nil)
- (mm-attachment-override-types
- (cons type mm-attachment-override-types))
- (mm-automatic-display (cons type mm-automatic-display))
- (mm-automatic-external-display
- (cons type mm-automatic-external-display))
- ;; Suppress adding of button to the cached part.
- (gnus-inhibit-mime-unbuttonizing nil))
- (gnus-display-mime (mm-handle-cache handle)))
- ;; Move undisplayer added to the cached handle to the parent.
- (mm-handle-set-undisplayer
- handle
- (mm-handle-undisplayer (mm-handle-cache handle)))
- (mm-handle-set-undisplayer (mm-handle-cache handle) nil)))))
+ (mm-display-part (mm-handle-cache handle))))
+ ;; Move undisplayer added to the cached handle to the parent.
+ (mm-handle-set-undisplayer
+ handle (mm-handle-undisplayer (mm-handle-cache handle)))
+ (mm-handle-set-undisplayer (mm-handle-cache handle) nil)))
(provide 'mm-extern)
(coding-system-for-write mm-binary-coding-system)
retval err-msg)
(message "%s" msg)
- (with-temp-buffer
+ (mm-with-unibyte-buffer
(insert-buffer-substring cur)
(condition-case err
(progn
(let ((coding-system (mm-charset-to-coding-system (match-string 1 string)))
;;(language (match-string 2 string))
(value (match-string 3 string)))
- (mm-with-multibyte-buffer
+ (mm-with-unibyte-buffer
(insert value)
(goto-char (point-min))
(while (search-forward "%" nil t)
(string-to-number (buffer-substring (point) (+ (point) 2)) 16)
(delete-region (1- (point)) (+ (point) 2)))))
;; Decode using the charset, if any.
- (unless (memq coding-system '(nil ascii))
- (mm-decode-coding-region (point-min) (point-max) coding-system))
- (buffer-string))))
+ (if (memq coding-system '(nil ascii))
+ (buffer-string)
+ (mm-decode-coding-string (buffer-string) coding-system)))))
(defun rfc2231-encode-string (param value)
"Return and PARAM=VALUE string encoded according to RFC2231.
;; Don't make lines exceeding 76 column.
(limit (- 74 (length param)))
spacep encodep charsetp charset broken)
- (with-temp-buffer
+ (mm-with-multibyte-buffer
(insert value)
(goto-char (point-min))
(while (not (eobp))
(forward-char 1))
(when charsetp
(setq charset (mm-encode-body)))
+ (mm-disable-multibyte)
(cond
((or encodep charsetp
(progn