]> git.notmuchmail.org Git - notmuch/blobdiff - emacs/notmuch-show.el
emacs: Don't override mm-show-part in notmuch-show-view-part
[notmuch] / emacs / notmuch-show.el
index acaef8ef2afd3871b071e468025fec44ab9f124c..654767f5aaf104d22e78eeeaad9034104471d5e6 100644 (file)
@@ -38,7 +38,6 @@
 (require 'notmuch-print)
 
 (declare-function notmuch-call-notmuch-process "notmuch" (&rest args))
-(declare-function notmuch-fontify-headers "notmuch" nil)
 (declare-function notmuch-search-next-thread "notmuch" nil)
 (declare-function notmuch-search-show-thread "notmuch" nil)
 
@@ -158,6 +157,7 @@ indentation."
   '(("Gmane" . "http://mid.gmane.org/")
     ("MARC" . "http://marc.info/?i=")
     ("Mail Archive, The" . "http://mail-archive.com/search?l=mid&q=")
+    ("LKML" . "http://lkml.kernel.org/r/")
     ;; FIXME: can these services be searched by `Message-Id' ?
     ;; ("MarkMail" . "http://markmail.org/")
     ;; ("Nabble" . "http://nabble.com/")
@@ -362,8 +362,7 @@ operation on the contents of the current buffer."
     (if (re-search-forward "(\\([^()]*\\))$" (line-end-position) t)
        (let ((inhibit-read-only t))
          (replace-match (concat "("
-                                (propertize (mapconcat 'identity tags " ")
-                                            'face 'notmuch-tag-face)
+                                (notmuch-tag-format-tags tags)
                                 ")"))))))
 
 (defun notmuch-clean-address (address)
@@ -441,8 +440,7 @@ message at DEPTH in the current thread."
            " ("
            date
            ") ("
-           (propertize (mapconcat 'identity tags " ")
-                       'face 'notmuch-tag-face)
+           (notmuch-tag-format-tags tags)
            ")\n")
     (overlay-put (make-overlay start (point)) 'face 'notmuch-message-summary-face)))
 
@@ -530,20 +528,15 @@ message at DEPTH in the current thread."
 
 (defun notmuch-show-view-part (message-id nth &optional filename content-type )
   (notmuch-with-temp-part-buffer message-id nth
-    ;; set mm-inlined-types to nil to force an external viewer
-    (let ((handle (mm-make-handle (current-buffer) (list content-type)))
-         (mm-inlined-types nil))
-      ;; We override mm-save-part as notmuch-show-save-part is better
-      ;; since it offers the filename. We need to lexically bind
-      ;; everything we need for notmuch-show-save-part to prevent
-      ;; potential dynamic shadowing.
-      (lexical-let ((message-id message-id)
-                   (nth nth)
-                   (filename filename)
-                   (content-type content-type))
-       (flet ((mm-save-part (&rest args) (notmuch-show-save-part
-                                          message-id nth filename content-type)))
-         (mm-display-part handle))))))
+    (let* ((disposition (if filename `(attachment (filename . ,filename))))
+          (handle (mm-make-handle (current-buffer) (list content-type)
+                                  nil nil disposition))
+          ;; Set the default save directory to be consistent with
+          ;; `notmuch-show-save-part'.
+          (mm-default-directory (or mailcap-download-directory "~/"))
+          ;; set mm-inlined-types to nil to force an external viewer
+          (mm-inlined-types nil))
+      (mm-display-part handle))))
 
 (defun notmuch-show-interactively-view-part (message-id nth &optional filename content-type)
   (notmuch-with-temp-part-buffer message-id nth
@@ -799,9 +792,9 @@ message at DEPTH in the current thread."
 (defun notmuch-show-insert-part-text/x-vcalendar (msg part content-type nth depth declared-type)
   (notmuch-show-insert-part-text/calendar msg part content-type nth depth declared-type))
 
-(defun notmuch-show-insert-part-application/octet-stream (msg part content-type nth depth declared-type)
+(defun notmuch-show-get-mime-type-of-application/octet-stream (part)
   ;; If we can deduce a MIME type from the filename of the attachment,
-  ;; do so and pass it on to the handler for that type.
+  ;; we return that.
   (if (plist-get part :filename)
       (let ((extension (file-name-extension (plist-get part :filename)))
            mime-type)
@@ -811,13 +804,13 @@ message at DEPTH in the current thread."
              (setq mime-type (mailcap-extension-to-mime extension))
              (if (and mime-type
                       (not (string-equal mime-type "application/octet-stream")))
-                 (notmuch-show-insert-bodypart-internal msg part mime-type nth depth content-type)
+                 mime-type
                nil))
          nil))))
 
 ;; Handler for wash generated inline patch fake parts.
 (defun notmuch-show-insert-part-inline-patch-fake-part (msg part content-type nth depth declared-type)
-  (notmuch-show-insert-part-*/* msg part "text/x-diff" nth depth "inline patch"))
+  (notmuch-show-insert-part-*/* msg part content-type nth depth declared-type))
 
 (defun notmuch-show-insert-part-text/html (msg part content-type nth depth declared-type)
   ;; text/html handler to work around bugs in renderers and our
@@ -888,11 +881,16 @@ message at DEPTH in the current thread."
   "Insert the body part PART at depth DEPTH in the current thread.
 
 If HIDE is non-nil then initially hide this part."
-  (let ((content-type (downcase (plist-get part :content-type)))
-       (nth (plist-get part :id))
-       (beg (point)))
-
-    (notmuch-show-insert-bodypart-internal msg part content-type nth depth content-type)
+  (let* ((content-type (downcase (plist-get part :content-type)))
+        (mime-type (or (and (string= content-type "application/octet-stream")
+                            (notmuch-show-get-mime-type-of-application/octet-stream part))
+                       (and (string= content-type "inline patch")
+                            "text/x-diff")
+                       content-type))
+        (nth (plist-get part :id))
+        (beg (point)))
+
+    (notmuch-show-insert-bodypart-internal msg part mime-type nth depth content-type)
     ;; Some of the body part handlers leave point somewhere up in the
     ;; part, so we make sure that we're down at the end.
     (goto-char (point-max))