summaryrefslogtreecommitdiff
path: root/lisp/gnus/mm-extern.el
diff options
context:
space:
mode:
authorMiles Bader <miles@gnu.org>2006-03-19 19:39:53 +0000
committerMiles Bader <miles@gnu.org>2006-03-19 19:39:53 +0000
commit531bedc37c5e0b060c51565ba3a17ef471c2b510 (patch)
tree56be81522417c7122267c086e4ba5deb8cdba21f /lisp/gnus/mm-extern.el
parent3dcef10bbc435cc2d2b89670366500603fd6f31b (diff)
downloademacs-531bedc37c5e0b060c51565ba3a17ef471c2b510.tar.gz
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-163
Merge from gnus--rel--5.10 Patches applied: * gnus--rel--5.10 (patch 58-61) - Update from CVS
Diffstat (limited to 'lisp/gnus/mm-extern.el')
-rw-r--r--lisp/gnus/mm-extern.el104
1 files changed, 57 insertions, 47 deletions
diff --git a/lisp/gnus/mm-extern.el b/lisp/gnus/mm-extern.el
index da3ecb8f351..b736374f016 100644
--- a/lisp/gnus/mm-extern.el
+++ b/lisp/gnus/mm-extern.el
@@ -112,11 +112,8 @@
(insert "[" info "]\n\n")))
;;;###autoload
-(defun mm-inline-external-body (handle &optional no-display)
- "Show the external-body part of HANDLE.
-This function replaces the buffer of HANDLE with a buffer contains
-the entire message.
-If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing."
+(defun mm-extern-cache-contents (handle)
+ "Put the external-body part of HANDLE into its cache."
(let* ((access-type (cdr (assq 'access-type
(cdr (mm-handle-type handle)))))
(func (cdr (assq (intern
@@ -124,48 +121,61 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing."
(or access-type
(error "Couldn't find access type"))))
mm-extern-function-alist)))
- gnus-displaying-mime buf
- handles)
- (unless (mm-handle-cache handle)
- (unless func
- (error "Access type (%s) is not supported" access-type))
- (with-temp-buffer
- (mm-insert-part handle)
- (goto-char (point-max))
- (insert "\n\n")
- (setq handles (mm-dissect-buffer t)))
- (unless (bufferp (car handles))
- (mm-destroy-parts handles)
- (error "Multipart external body is not supported"))
- (save-excursion ;; single part
- (set-buffer (setq buf (mm-handle-buffer handles)))
- (let (good)
- (unwind-protect
- (progn
- (funcall func handle)
- (setq good t))
- (unless good
- (mm-destroy-parts handles))))
- (mm-handle-set-cache handle handles))
- (setq gnus-article-mime-handles
- (mm-merge-handles gnus-article-mime-handles handles)))
- (unless no-display
- (save-excursion
- (save-restriction
- (narrow-to-region (point) (point))
- (gnus-display-mime (mm-handle-cache handle))
- (mm-handle-set-undisplayer
- handle
- `(lambda ()
- (let (buffer-read-only)
- (condition-case nil
- ;; This is only valid on XEmacs.
- (mapcar (lambda (prop)
- (remove-specifier
- (face-property 'default prop) (current-buffer)))
- '(background background-pixmap foreground))
- (error nil))
- (delete-region ,(point-min-marker) ,(point-max-marker))))))))))
+ buf handles)
+ (unless func
+ (error "Access type (%s) is not supported" access-type))
+ (mm-with-part handle
+ (goto-char (point-max))
+ (insert "\n\n")
+ ;; It should be just a single MIME handle.
+ (setq handles (mm-dissect-buffer t)))
+ (unless (bufferp (car handles))
+ (mm-destroy-parts handles)
+ (error "Multipart external body is not supported"))
+ (save-excursion
+ (set-buffer (setq buf (mm-handle-buffer handles)))
+ (let (good)
+ (unwind-protect
+ (progn
+ (funcall func handle)
+ (setq good t))
+ (unless good
+ (mm-destroy-parts handles))))
+ (mm-handle-set-cache handle handles))
+ (setq gnus-article-mime-handles
+ (mm-merge-handles gnus-article-mime-handles handles))))
+
+;;;###autoload
+(defun mm-inline-external-body (handle &optional no-display)
+ "Show the external-body part of HANDLE.
+This function replaces the buffer of HANDLE with a buffer contains
+the entire message.
+If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing."
+ (unless (mm-handle-cache handle)
+ (mm-extern-cache-contents handle))
+ (unless no-display
+ (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)))))
(provide 'mm-extern)