[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: