]> git.notmuchmail.org Git - notmuch/blobdiff - emacs/notmuch-show.el
Don't re-compress .gz & al. in notmuch-show-save-part.
[notmuch] / emacs / notmuch-show.el
index 2f6be597b410eb61cf34764f31b82509d0d204d8..40cf74e8f110f447b9196bd709c12adfa191e27d 100644 (file)
@@ -306,10 +306,11 @@ message at DEPTH in the current thread."
                   "Filename to save as: "
                   (or mailcap-download-directory "~/")
                   nil nil
-                  filename))
-           (require-final-newline nil)
-           (coding-system-for-write 'no-conversion))
-       (write-region (point-min) (point-max) file)))))
+                  filename)))
+       ;; Don't re-compress .gz & al.  Arguably we should make
+       ;; `file-name-handler-alist' nil, but that would chop
+       ;; ange-ftp, which is reasonable to use here.
+       (mm-write-region (point-min) (point-max) file nil nil nil 'no-conversion t)))))
 
 (defun notmuch-show-mm-display-part-inline (msg part content-type content)
   "Use the mm-decode/mm-view functions to display a part in the
@@ -446,6 +447,56 @@ current buffer, if possible."
       (indent-rigidly start (point) 1)))
   t)
 
+(defun notmuch-show-insert-part-multipart/signed (msg part content-type nth depth declared-type)
+  (let ((button (notmuch-show-insert-part-header nth declared-type content-type nil)))
+    (button-put button 'face '(:foreground "blue"))
+    ;; add signature status button if sigstatus provided
+    (if (plist-member part :sigstatus)
+       (let* ((headers (plist-get msg :headers))
+              (from (plist-get headers :From))
+              (sigstatus (car (plist-get part :sigstatus))))
+         (notmuch-crypto-insert-sigstatus-button sigstatus from))
+      ;; if we're not adding sigstatus, tell the user how they can get it
+      (button-put button 'help-echo "Set notmuch-crypto-process-mime to process cryptographic mime parts.")))
+
+  (let ((inner-parts (plist-get part :content))
+       (start (point)))
+    ;; Show all of the parts.
+    (mapc (lambda (inner-part)
+           (notmuch-show-insert-bodypart msg inner-part depth))
+         inner-parts)
+
+    (when notmuch-show-indent-multipart
+      (indent-rigidly start (point) 1)))
+  t)
+
+(defun notmuch-show-insert-part-multipart/encrypted (msg part content-type nth depth declared-type)
+  (let ((button (notmuch-show-insert-part-header nth declared-type content-type nil)))
+    (button-put button 'face '(:foreground "blue"))
+    ;; add encryption status button if encstatus specified
+    (if (plist-member part :encstatus)
+       (let ((encstatus (car (plist-get part :encstatus))))
+         (notmuch-crypto-insert-encstatus-button encstatus)
+         ;; add signature status button if sigstatus specified
+         (if (plist-member part :sigstatus)
+             (let* ((headers (plist-get msg :headers))
+                    (from (plist-get headers :From))
+                    (sigstatus (car (plist-get part :sigstatus))))
+               (notmuch-crypto-insert-sigstatus-button sigstatus from))))
+      ;; if we're not adding encstatus, tell the user how they can get it
+      (button-put button 'help-echo "Set notmuch-crypto-process-mime to process cryptographic mime parts.")))
+
+  (let ((inner-parts (plist-get part :content))
+       (start (point)))
+    ;; Show all of the parts.
+    (mapc (lambda (inner-part)
+           (notmuch-show-insert-bodypart msg inner-part depth))
+         inner-parts)
+
+    (when notmuch-show-indent-multipart
+      (indent-rigidly start (point) 1)))
+  t)
+
 (defun notmuch-show-insert-part-multipart/* (msg part content-type nth depth declared-type)
   (notmuch-show-insert-part-header nth declared-type content-type nil)
   (let ((inner-parts (plist-get part :content))
@@ -524,6 +575,11 @@ current buffer, if possible."
                nil))
          nil))))
 
+(defun notmuch-show-insert-part-application/* (msg part content-type nth depth declared-type
+)
+  ;; do not render random "application" parts
+  (notmuch-show-insert-part-header nth content-type declared-type (plist-get part :filename)))
+
 (defun notmuch-show-insert-part-*/* (msg part content-type nth depth declared-type)
   ;; This handler _must_ succeed - it is the handler of last resort.
   (notmuch-show-insert-part-header nth content-type declared-type (plist-get part :filename))
@@ -588,16 +644,6 @@ current buffer, if possible."
   "Insert the body part PART at depth DEPTH in the current thread."
   (let ((content-type (downcase (plist-get part :content-type)))
        (nth (plist-get part :id)))
-    ;; add encryption status button if encstatus specified
-    (if (plist-member part :encstatus)
-       (let* ((encstatus (car (plist-get part :encstatus))))
-         (notmuch-crypto-insert-encstatus-button encstatus)))
-    ;; add signature status button if sigstatus specified
-    (if (plist-member part :sigstatus)
-       (let* ((headers (plist-get msg :headers))
-              (from (plist-get headers :From))
-              (sigstatus (car (plist-get part :sigstatus))))
-         (notmuch-crypto-insert-sigstatus-button sigstatus from)))
     (notmuch-show-insert-bodypart-internal msg part content-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.