Removed the interactive prompt from comp when disposing an existing message.
authormarkus schnalke <meillo@marmaro.de>
Thu, 9 Feb 2012 18:08:37 +0000 (19:08 +0100)
committermarkus schnalke <meillo@marmaro.de>
Thu, 9 Feb 2012 18:08:37 +0000 (19:08 +0100)
It became useless in the restructuring of the draft facility but remained
until now. Also refactored this part of the code.

man/comp.man1
uip/comp.c

index da50300..af8577d 100644 (file)
@@ -49,7 +49,7 @@ forms file with the switch
 You may also start
 .B comp
 using the contents of an existing message
 You may also start
 .B comp
 using the contents of an existing message
-as the form.  If you supply either a
+as the form.  If you supply a
 .I +folder
 or
 .I msg
 .I +folder
 or
 .I msg
@@ -83,6 +83,15 @@ is terminated without sending the draft, the draft can
 be edited again via
 .RB \*(lq comp
 .BR \-use \*(rq.
 be edited again via
 .RB \*(lq comp
 .BR \-use \*(rq.
+If
+.B \-use
+is given,
+.I msg
+is located within the draft folder.
+A
+.I +folder
+argument is not allowed together with
+.BR \-use .
 .PP
 If the draft already exists,
 .B comp
 .PP
 If the draft already exists,
 .B comp
index 4536372..ce76cd8 100644 (file)
@@ -32,34 +32,17 @@ static struct swit switches[] = {
        { NULL, 0 }
 };
 
        { NULL, 0 }
 };
 
-static struct swit aqrunl[] = {
-#define NOSW  0
-       { "quit", 0 },
-#define YESW  1
-       { "replace", 0 },
-#define USELSW  2
-       { "use", 0 },
-#define LISTDSW  3
-       { "list", 0 },
-#define REFILSW  4
-       { "refile +folder", 0 },
-#define NEWSW  5
-       { "new", 0 },
-       { NULL, 0 }
-};
-
 
 int
 main(int argc, char **argv)
 {
        int use = NOUSE, nedit = 0, nwhat = 0;
 
 int
 main(int argc, char **argv)
 {
        int use = NOUSE, nedit = 0, nwhat = 0;
-       int i, in, out;
+       int in, out;
        char *cp, *cwd, *maildir;
        char *ed = NULL, *form = NULL;
        char *folder = NULL, *msg = NULL, buf[BUFSIZ];
        char drft[BUFSIZ], **argp, **arguments;
        struct msgs *mp = NULL;
        char *cp, *cwd, *maildir;
        char *ed = NULL, *form = NULL;
        char *folder = NULL, *msg = NULL, buf[BUFSIZ];
        char drft[BUFSIZ], **argp, **arguments;
        struct msgs *mp = NULL;
-       struct stat st;
 
 #ifdef LOCALE
        setlocale(LC_ALL, "");
 
 #ifdef LOCALE
        setlocale(LC_ALL, "");
@@ -138,105 +121,63 @@ main(int argc, char **argv)
        if (form && (folder || msg))
                adios(NULL, "can't mix forms and folders/msgs");
 
        if (form && (folder || msg))
                adios(NULL, "can't mix forms and folders/msgs");
 
-       if (!use && (folder || msg)) {
-               /*
-               ** Take a message as the "form" for the new message.
-               */
+       if (use && folder)
+               adios(NULL, "can't mix -use and +folder");
+
+       if (use) {
+               /* Don't copy; the draft shall get removed in the end. */
+               strncpy(drft, m_draft(msg ? msg : seq_cur), sizeof(drft));
+
+       } else if (folder || msg) {
+               /* Take a message as the "form" for the new message. */
                if (!msg)
                        msg = seq_cur;
                if (!folder)
                        folder = getcurfol();
                maildir = toabsdir(folder);
                if (!msg)
                        msg = seq_cur;
                if (!folder)
                        folder = getcurfol();
                maildir = toabsdir(folder);
-
                if (chdir(maildir) == NOTOK)
                        adios(maildir, "unable to change directory to");
                if (chdir(maildir) == NOTOK)
                        adios(maildir, "unable to change directory to");
-
                /* read folder and create message structure */
                if (!(mp = folder_read(folder)))
                        adios(NULL, "unable to read folder %s", folder);
                /* read folder and create message structure */
                if (!(mp = folder_read(folder)))
                        adios(NULL, "unable to read folder %s", folder);
-
                /* check for empty folder */
                if (mp->nummsg == 0)
                        adios(NULL, "no messages in %s", folder);
                /* check for empty folder */
                if (mp->nummsg == 0)
                        adios(NULL, "no messages in %s", folder);
-
                /* parse the message range/sequence/name and set SELECTED */
                if (!m_convert(mp, msg))
                        done(1);
                seq_setprev(mp);  /* set the previous-sequence */
                /* parse the message range/sequence/name and set SELECTED */
                if (!m_convert(mp, msg))
                        done(1);
                seq_setprev(mp);  /* set the previous-sequence */
-
                if (mp->numsel > 1)
                        adios(NULL, "only one message at a time!");
                if (mp->numsel > 1)
                        adios(NULL, "only one message at a time!");
-
                if ((in = open(form = getcpy(m_name(mp->lowsel)),
                                O_RDONLY)) == NOTOK)
                        adios(form, "unable to open message");
                if ((in = open(form = getcpy(m_name(mp->lowsel)),
                                O_RDONLY)) == NOTOK)
                        adios(form, "unable to open message");
-       } else
-               in = open_form(&form, components);
-
-try_it_again:
-       strncpy(drft, m_draft(use ? (msg?msg:seq_cur) : seq_beyond),
-                       sizeof(drft));
 
 
-       /*
-       ** Check if we have an existing draft
-       */
-       if ((out = open(drft, O_RDONLY)) != NOTOK) {
-               i = fdcompare(in, out);
+               strncpy(drft, m_draft(seq_beyond), sizeof(drft));
+               if ((out = creat(drft, m_gmprot())) == NOTOK) {
+                       adios(drft, "unable to create");
+               }
+               cpydata(in, out, form, drft);
+               close(in);
                close(out);
 
                close(out);
 
-               /*
-               ** If we have given -use flag, or if the
-               ** draft is just the same as the components
-               ** file, then no need to ask any questions.
-               */
-               if (use || i)
-                       goto edit_it;
-
-               if (stat(drft, &st) == NOTOK)
-                       adios(drft, "unable to stat");
-               printf("Draft \"%s\" exists (%ld bytes).",
-                               drft, (long) st.st_size);
-               for (i = LISTDSW; i != YESW;) {
-                       if (!(argp = getans("\nDisposition? ", aqrunl)))
-                               done(1);
-                       switch (i = smatch(*argp, aqrunl)) {
-                       case NOSW:
-                               done(0);
-                       case NEWSW:
-                               use = NOUSE;
-                               goto try_it_again;
-                       case YESW:
-                               break;
-                       case USELSW:
-                               use++;
-                               goto edit_it;
-                       case LISTDSW:
-                               showfile(++argp, drft);
-                               break;
-                       case REFILSW:
-                               if (refile(++argp, drft) == 0)
-                                       i = YESW;
-                               break;
-                       default:
-                               advise(NULL, "say what?");
-                               break;
-                       }
+       } else {
+               in = open_form(&form, components);
+
+               strncpy(drft, m_draft(seq_beyond), sizeof(drft));
+               if ((out = creat(drft, m_gmprot())) == NOTOK) {
+                       adios(drft, "unable to create");
                }
                }
-       } else if (use) {
-               adios(drft, "unable to open");
+               cpydata(in, out, form, drft);
+               close(in);
+               close(out);
        }
 
        }
 
-       if ((out = creat(drft, m_gmprot())) == NOTOK)
-               adios(drft, "unable to create");
-       cpydata(in, out, form, drft);
-       close(in);
-       close(out);
-
-edit_it:
-       context_save();  /* save the context file */
+       context_save();
 
 
-       if (nwhat)
+       if (nwhat) {
                done(0);
                done(0);
+       }
        what_now(ed, nedit, use, drft, NULL, 0, NULLMP, NULL, cwd);
        done(1);
        return 1;
        what_now(ed, nedit, use, drft, NULL, 0, NULLMP, NULL, cwd);
        done(1);
        return 1;