Bug#164100: Mew to save attachment mails as single mail
Package: mew
Version: 1:2.2-7
Severity: whishlist
Hi,
I'd like Mew to save attachments as single mail, for example, split
mailman digest MIME mails to save only the interresting ones in a
different folders.
This feature as been release as a patch by Tatsuya Kinoshita
<tats@iris.ne.jp> and submitted on the Mew mailing-list
<http://mew.org/ml/mew-int-2.0/msg00449.html> ([mew-int 00849] Re:
Saving attachment mail (one more)).
He told me to send a bug report with the patch he made, here you are.
Thank you,
-- arnaud :: http://vbstefi60.fapse.ulg.ac.be/~arnaud/
This patch is written by Tatsuya Kinoshita. Copyright is disclaimed.
diff -ur mew-2.2.orig/mew-edit.el mew-2.2/mew-edit.el
--- mew-2.2.orig/mew-edit.el Thu Feb 21 11:58:40 2002
+++ mew-2.2/mew-edit.el Sat Apr 27 01:57:13 2002
@@ -378,51 +378,64 @@
;;; Burst
;;;
-(defun mew-summary-burst-body (fld msg folder)
+(defun mew-summary-burst-body (fld msg folder &optional num)
(save-excursion
(let ((buf (generate-new-buffer mew-buffer-prefix))
- ret errmsg entry multi mstr m n len)
+ ret errmsg mstr m)
(set-buffer buf)
(mew-erase-buffer)
(mew-insert-message fld msg mew-cs-text-for-read nil)
(mew-dinfo-set 1 nil nil nil) ;; xxx
(mew-decode-for-edit)
- (setq multi (mew-syntax-get-part mew-decode-syntax))
(cond
- ((not (mew-syntax-multipart-p multi))
+ ((not (mew-syntax-multipart-p (mew-syntax-get-part mew-decode-syntax)))
(message "Cannot burst"))
((not (mew-folder-check folder))
(setq errmsg (format "%s is wrong. Nothing was processed" folder)))
((not (setq mstr (mew-folder-new-message folder 'num-only)))
(setq errmsg (format "Error in %s. Nothing was processed" folder)))
(t
- (setq m (string-to-int mstr))
- (setq len (- (length multi) mew-syntax-magic))
- (setq n 1)
- (while (<= n len)
- (setq entry (mew-syntax-get-entry mew-decode-syntax (list n)))
- (if (not
- (string=
- (mew-syntax-get-value (mew-syntax-get-ct entry) 'cap)
- mew-ct-msg))
- () ;; return value
- (mew-frwlet
- mew-cs-dummy mew-cs-text-for-write
- (write-region
- (mew-syntax-get-begin entry)
- ;; This is RFC 822 message.
- ;; So, body is a single text/plain.
- (mew-syntax-get-end (mew-syntax-get-part entry))
- (mew-expand-folder folder (int-to-string m))
- nil 'no-msg))
- (setq m (1+ m)))
- (setq n (1+ n)))
- (mew-touch-folder folder)
- (setq ret (list mstr (int-to-string (1- m))))))
+ (setq m (mew-summary-burst-part (mew-syntax-get-part mew-decode-syntax)
+ folder (string-to-int mstr) num))
+ (if (= m (string-to-int mstr))
+ (message "Nothing was processed")
+ (mew-touch-folder folder)
+ (setq ret (list mstr (int-to-string (1- m)))))))
(mew-remove-buffer buf)
(if errmsg (error errmsg))
ret)))
+(defun mew-summary-burst-part (part folder newmsg &optional num)
+ (let (n len nums entry)
+ (setq n 1)
+ (cond
+ (num
+ (setq nums (mew-syntax-number-to-nums num))
+ (setq len 1))
+ (t
+ (setq nums (list n))
+ (setq len (- (length part) mew-syntax-magic))))
+ (while (<= n len)
+ (setq entry (mew-syntax-get-entry part nums))
+ (cond
+ ((mew-syntax-multipart-p entry)
+ (setq newmsg (mew-summary-burst-part entry folder newmsg)))
+ ((string= (mew-syntax-get-value (mew-syntax-get-ct entry) 'cap)
+ mew-ct-msg)
+ (mew-frwlet
+ mew-cs-dummy mew-cs-text-for-write
+ (write-region
+ (mew-syntax-get-begin entry)
+ ;; This is RFC 822 message.
+ ;; So, body is a single text/plain.
+ (mew-syntax-get-end (mew-syntax-get-part entry))
+ (mew-expand-folder folder (int-to-string newmsg))
+ nil 'no-msg))
+ (setq newmsg (1+ newmsg))))
+ (setq n (1+ n))
+ (setq nums (list n)))
+ newmsg))
+
(defvar mew-burst-last-folder nil)
(defun mew-input-burst-folder ()
@@ -433,16 +446,18 @@
(setq mew-burst-last-folder (mew-input-folder default))
mew-burst-last-folder))
-(defun mew-summary-burst ()
- "De-capsulate messages embedded in this message."
- (interactive)
+(defun mew-summary-burst (&optional arg)
+ "De-capsulate messages embedded in this message.
+If called with '\\[universal-argument]', the current part is de-capsulated."
+ (interactive "P")
(mew-summary-msg-or-part
(let ((fld (mew-summary-folder-name))
(msg (mew-summary-message-number2))
(folder (mew-input-burst-folder))
+ (num (if arg (mew-syntax-number)))
ret)
(message "Bursting...")
- (setq ret (mew-summary-burst-body fld msg folder))
+ (setq ret (mew-summary-burst-body fld msg folder num))
(when ret
(message "Bursting...done")
(if (y-or-n-p (format "Go to %s? " folder))
Reply to: