<<< Date Index >>>     <<< Thread Index >>>

Re: [PATCH] attach multiple files from command line (v2)



Re: To Mutt Developers 2007-03-24 <20070324142153.GF24935@xxxxxxxx>
> Re: To Mutt Developers 2007-03-21 <20070321193650.GB2707@xxxxxxxx>
> > The syntax is even "almost" backwards compatible:
> > 
> > mutt -a filelist -- rcptlist
> > mutt -a file rcptlist
> 
> Here's a patch that implements this. (And does likewise for mutt -A
> and -Q.)

The previous patch silently recognized all non-option arguments before
-- as attachments even when no -a option was present. This updated
patch fixes this.


# Support -a <filelist> -- <addrlist> to attach multiple files.

diff -r 888a57a2b5f2 -r 7a239842bcb6 doc/manual.xml.head
--- a/doc/manual.xml.head       Fri Mar 23 10:32:29 2007 -0700
+++ b/doc/manual.xml.head       Tue Apr 03 22:50:25 2007 +0200
@@ -5973,7 +5973,8 @@ To compose a new message
 </para>
 
 <para>
-<literal>mutt</literal> &lsqb; -n &rsqb; &lsqb; -F <emphasis>muttrc</emphasis> 
&rsqb; &lsqb; -a <emphasis>file</emphasis> &rsqb; &lsqb; -c 
<emphasis>address</emphasis> &rsqb; &lsqb; -i <emphasis>filename</emphasis> 
&rsqb; &lsqb; -s <emphasis>subject</emphasis> &rsqb; 
<emphasis>address</emphasis> &lsqb; <emphasis>address</emphasis> ... &rsqb; 
+<literal>mutt</literal> &lsqb; -n &rsqb; &lsqb; -F <emphasis>muttrc</emphasis> 
&rsqb; &lsqb; -a <emphasis>file</emphasis> &rsqb; &lsqb; -c 
<emphasis>address</emphasis> &rsqb; &lsqb; -i <emphasis>filename</emphasis> 
&rsqb; &lsqb; -s <emphasis>subject</emphasis> &rsqb;
+&lsqb; &lsqb; <emphasis>file</emphasis> ... &rsqb; -- &rsqb; 
<emphasis>address</emphasis> &lsqb; <emphasis>address</emphasis> ... &rsqb; 
 </para>
 
 <para>
@@ -5992,6 +5993,12 @@ of the file ``&tilde;/run2.dat''.
 of the file ``&tilde;/run2.dat''.
 </para>
 
+<para>
+All files passed with -a <emphasis>file</emphasis> will be attached as a MIME
+part to the message. To attach several files, use ``--'' to separate files and
+recipient addresses: <literal>mutt -a *.png -- some@xxxxxxx</literal>
+</para>
+
 </sect1>
 
 <sect1 id="commands">
diff -r 888a57a2b5f2 -r 7a239842bcb6 doc/mutt.man
--- a/doc/mutt.man      Fri Mar 23 10:32:29 2007 -0700
+++ b/doc/mutt.man      Tue Apr 03 22:50:25 2007 +0200
@@ -29,14 +29,14 @@ mutt \- The Mutt Mail User Agent
 .B mutt 
 [-nx] 
 [-e \fIcmd\fP] 
-[-a \fIfile\fP]
 [-F \fIfile\fP]
 [-H \fIfile\fP]
 [-i \fIfile\fP]
 [-s \fIsubj\fP]
 [-b \fIaddr\fP]
 [-c \fIaddr\fP]
-[--]
+[\-a \fIfile\fP [...]]
+[\-\-]
 \fIaddr\fP [...]
 .PP
 .B mutt
@@ -62,8 +62,10 @@ OpenPGP, and a threaded sorting mode.
 .PP
 .IP "-A \fIalias\fP"
 An expanded version of the given alias is passed to stdout.
-.IP "-a \fIfile\fP"
+.IP "-a \fIfile\fP [...]"
 Attach a file to your message using MIME.
+To attach multiple files, separating filenames and recipient addresses with
+"\-\-" is mandatory, e.g. \fBmutt \-a img.jpg *.png \-\- addr1 addr2\fP.
 .IP "-b \fIaddress\fP"
 Specify a blind-carbon-copy (BCC) recipient
 .IP "-c \fIaddress\fP"
@@ -117,8 +119,9 @@ mailbox.
 .IP "-Z"
 Causes Mutt to open the first mailbox specified by the \fImailboxes\fP
 command which contains new mail.
-.IP "--"
+.IP "\-\-"
 Treat remaining arguments as \fIaddr\fP even if they start with a dash.
+See also "\-a" above.
 .SH ENVIRONMENT
 .PP
 .IP "EDITOR"
diff -r 888a57a2b5f2 -r 7a239842bcb6 main.c
--- a/main.c    Fri Mar 23 10:32:29 2007 -0700
+++ b/main.c    Tue Apr 03 22:50:25 2007 +0200
@@ -105,12 +105,12 @@ static void mutt_usage (void)
   puts (mutt_make_version ());
 
   puts _(
-"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f <file> 
]\n\
-       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] 
[...]\n\
-       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] 
[...]\n\
-       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -D\n\
-       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] [ 
-i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] [ -- ] <addr> [ ... ]\n\
-       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n\
+"usage: mutt [<options>] [-z] [-f <file> | -yZ]\n\
+       mutt [<options>] [-x] [-Hi <file>] [-s <subj>] [-bc <addr>] [-a <file> 
[...]] [--] <addr> [...]\n\
+       mutt [<options>] -p\n\
+       mutt [<options>] -A <alias> [...]\n\
+       mutt [<options>] -Q <query> [...]\n\
+       mutt [<options>] -D\n\
        mutt -v[v]\n");
 
   puts _("\
@@ -143,7 +143,8 @@ options:\n\
   -z\t\texit immediately if there are no messages in the mailbox\n\
   -Z\t\topen the first folder with new message, exit immediately if none\n\
   -h\t\tthis help message");
-  puts _("  --\t\ttreat remaining arguments as addr even if starting with a 
dash");
+  puts _("  --\t\ttreat remaining arguments as addr even if starting with a 
dash\n\
+\t\twhen using -a with multiple filenames using -- is mandatory");
 
   exit (0);
 }
@@ -541,6 +542,7 @@ int main (int argc, char **argv)
   int dump_variables = 0;
   extern char *optarg;
   extern int optind;
+  int attach_sep = 0;
 
   /* sanity check against stupid administrators */
   
@@ -567,7 +569,14 @@ int main (int argc, char **argv)
 
   memset (Options, 0, sizeof (Options));
   memset (QuadOptions, 0, sizeof (QuadOptions));
-  
+
+  for (i = 1; i < argc; i++)
+    if (!strcmp(argv[i], "--"))
+    {
+      attach_sep = i;
+      break;
+    }
+
   while ((i = getopt (argc, argv, "A:a:b:F:f:c:Dd:e:H:s:i:hm:npQ:RvxyzZ")) != 
EOF)
     switch (i)
     {
@@ -709,7 +718,11 @@ int main (int argc, char **argv)
   crypt_init ();
 
   if (queries)
+  {
+    for (; optind < argc; optind++)
+      queries = mutt_add_list (queries, argv[optind]);
     return mutt_query_variables (queries);
+  }
   if (dump_variables)
     return mutt_dump_variables();
 
@@ -717,6 +730,8 @@ int main (int argc, char **argv)
   {
     int rv = 0;
     ADDRESS *a;
+    for (; optind < argc; optind++)
+      alias_queries = mutt_add_list (alias_queries, argv[optind]);
     for (; alias_queries; alias_queries = alias_queries->next)
     {
       if ((a = mutt_lookup_alias (alias_queries->data)))
@@ -733,7 +748,12 @@ int main (int argc, char **argv)
     }
     return rv;
   }
-  
+
+  /* if an -a option is present, all non-option arguments before -- are 
considered attachments */
+  if (attach)
+    for (; optind <= attach_sep; optind++)
+      attach = mutt_add_list (attach, argv[optind]);
+
   if (newMagic)
     mx_set_magic (newMagic);
 


Christoph
-- 
cb@xxxxxxxx | http://www.df7cb.de/

Attachment: signature.asc
Description: Digital signature