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 <[EMAIL PROTECTED]> 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))