aboutsummaryrefslogtreecommitdiffhomepage
path: root/notmuch.el
diff options
context:
space:
mode:
authorGravatar Keith Amidon <keith@nicira.com>2009-11-27 05:30:14 -0800
committerGravatar Carl Worth <cworth@cworth.org>2009-11-27 21:23:58 -0800
commite593b6aacb273a798ebbe0084be3018303835f44 (patch)
tree64e79d2b5317fb3bed14bfa14adf93a75df9250c /notmuch.el
parent07ce64e4352291fb5bd265f20c683c653ab81966 (diff)
Provide ability to save attachments
Previously the only way to save an attachment was to attempt to view it and then save it from within the viewer program.
Diffstat (limited to 'notmuch.el')
-rw-r--r--notmuch.el41
1 files changed, 41 insertions, 0 deletions
diff --git a/notmuch.el b/notmuch.el
index 282932ed..a1c98a56 100644
--- a/notmuch.el
+++ b/notmuch.el
@@ -300,6 +300,47 @@ buffer."
(with-current-notmuch-show-message
(mm-display-parts (mm-dissect-buffer))))
+(defun notmuch-foreach-mime-part (function mm-handle)
+ (cond ((stringp (car mm-handle))
+ (dolist (part (cdr mm-handle))
+ (notmuch-foreach-mime-part function part)))
+ ((bufferp (car mm-handle))
+ (funcall function mm-handle))
+ (t (dolist (part mm-handle)
+ (notmuch-foreach-mime-part function part)))))
+
+(defun notmuch-count-attachments (mm-handle)
+ (let ((count 0))
+ (notmuch-foreach-mime-part
+ (lambda (p)
+ (let ((disposition (mm-handle-disposition p)))
+ (and (listp disposition)
+ (equal (car disposition) "attachment")
+ (incf count))))
+ mm-handle)
+ count))
+
+(defun notmuch-save-attachments (mm-handle &optional queryp)
+ (notmuch-foreach-mime-part
+ (lambda (p)
+ (let ((disposition (mm-handle-disposition p)))
+ (and (listp disposition)
+ (equal (car disposition) "attachment")
+ (or (not queryp)
+ (y-or-n-p
+ (concat "Save '" (cdr (assq 'filename disposition)) "' ")))
+ (mm-save-part p))))
+ mm-handle))
+
+(defun notmuch-show-save-attachments ()
+ "Save the attachments to a message"
+ (interactive)
+ (with-current-notmuch-show-message
+ (let ((mm-handle (mm-dissect-buffer)))
+ (notmuch-save-attachments
+ mm-handle (> (notmuch-count-attachments mm-handle) 1))))
+ (message "Done"))
+
(defun notmuch-reply (query-string)
(switch-to-buffer (generate-new-buffer "notmuch-draft"))
(call-process notmuch-command nil t nil "reply" query-string)