emacs: Use `mm-display-part' when possible

For parts that the mm-decode/mm-view functions can inline and we have
the content, use `mm-display-part' to insert the part in the
buffer.
This commit is contained in:
David Edmondson 2010-03-23 11:54:05 +00:00 committed by Carl Worth
parent b93c5749fd
commit 4488cf30f6

View file

@ -24,6 +24,7 @@
(require 'cl) (require 'cl)
(require 'mm-view) (require 'mm-view)
(require 'message) (require 'message)
(require 'mm-decode)
(require 'notmuch-lib) (require 'notmuch-lib)
(require 'notmuch-query) (require 'notmuch-query)
@ -214,6 +215,24 @@ message at DEPTH in the current thread."
;; Functions handling particular MIME parts. ;; Functions handling particular MIME parts.
(defun notmuch-show-mm-display-part-inline (part content-type)
"Use the mm-decode/mm-view functions to display a part inline, if possible."
(let ((handle (mm-make-handle nil (list content-type))))
(if (and (mm-inlinable-p handle)
(mm-inlined-p handle))
(progn
(insert (with-temp-buffer
(let ((display-buffer (current-buffer)))
(with-temp-buffer
(let ((work-buffer (current-buffer)))
(insert (plist-get part :content))
(set-buffer display-buffer)
(mm-display-part (mm-make-handle work-buffer
(list content-type)))
(buffer-string))))))
t)))
nil)
(defun notmuch-show-insert-part-text/plain (part content-type nth depth) (defun notmuch-show-insert-part-text/plain (part content-type nth depth)
(let ((start (point))) (let ((start (point)))
;; If this text/plain part is not the first part in the message, ;; If this text/plain part is not the first part in the message,
@ -227,16 +246,11 @@ message at DEPTH in the current thread."
(run-hook-with-args 'notmuch-show-insert-text/plain-hook depth)))) (run-hook-with-args 'notmuch-show-insert-text/plain-hook depth))))
t) t)
(defun notmuch-show-insert-part-text/* (part content-type nth depth)
;; Handle all text types other than text/html.
(if (string-equal "text/html" content-type)
nil
(notmuch-show-insert-part-header content-type (plist-get part :filename))
(insert (plist-get part :content))
t))
(defun notmuch-show-insert-part-*/* (part content-type nth depth) (defun notmuch-show-insert-part-*/* (part content-type nth depth)
(notmuch-show-insert-part-header content-type (plist-get part :filename)) (notmuch-show-insert-part-header content-type (plist-get part :filename))
;; If we have the content for the part, attempt to inline it.
(if (plist-get part :content)
(notmuch-show-mm-display-part-inline part content-type))
t) t)
;; Functions for determining how to handle MIME parts. ;; Functions for determining how to handle MIME parts.