[mew-int 00852] Re: Saving attachment mail (one more)

Tatsuya Kinoshita tats at example.com
Sat Apr 27 02:39:50 JST 2002


In message [mew-int 00851], on Fri, 26 Apr 2002,
Arnaud Vandyck <arnaud.vandyck at example.com> wrote:

> 2) On a multipart/Rfc822 part-x, Mew extracts _all_ the parts ('B'
>    or 'C-u B'). (what is the difference between 'B' and 'C-u B'?)

> Last, I did apply the patch by hand (patch command fails
> (mew-2.2-3.deb)) and look at the code: I did not understand a thing!

I guess that your Emacs used *.elc instead of *.el.

Anyway, I've created the patch for Mew 2.2 now.  Will you try this?

P.S.

It's easy to create a localized Debian package.

  # apt-get install fakeroot
  # apt-get build-dep mew
  $ apt-get source mew
  $ cd mew-2.2
  $ patch -p1 < ../mew-2.2+mew-int-00849.diff
  $ dch -v 1:2.2-3+local.1
  $ debuild -rfakeroot -uc -us
  $ cd ..
  # dpkg -i mew_2.2-3+local.1_all.deb mew-bin_2.2-3+local.1_i386.deb

  (`#' is a root's prompt.  I suggest sudo or su.)

-- 
Tatsuya Kinoshita
-------------- next part --------------

 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))


More information about the Mew-int mailing list