From 2d48b455c303a807041c35e4248955f8bec59eeb Mon Sep 17 00:00:00 2001 From: markus schnalke Date: Thu, 9 Feb 2012 19:08:37 +0100 Subject: [PATCH] Removed the interactive prompt from comp when disposing an existing message. It became useless in the restructuring of the draft facility but remained until now. Also refactored this part of the code. --- man/comp.man1 | 11 +++++- uip/comp.c | 115 ++++++++++++++------------------------------------------- 2 files changed, 38 insertions(+), 88 deletions(-) diff --git a/man/comp.man1 b/man/comp.man1 index da50300..af8577d 100644 --- a/man/comp.man1 +++ b/man/comp.man1 @@ -49,7 +49,7 @@ forms file with the switch 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 @@ -83,6 +83,15 @@ is terminated without sending the draft, the draft can 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 diff --git a/uip/comp.c b/uip/comp.c index 4536372..ce76cd8 100644 --- a/uip/comp.c +++ b/uip/comp.c @@ -32,34 +32,17 @@ static struct swit switches[] = { { 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 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; - struct stat st; #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 (!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 (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); - /* 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 */ - 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"); - } 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); - /* - ** 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); + } what_now(ed, nedit, use, drft, NULL, 0, NULLMP, NULL, cwd); done(1); return 1; -- 1.7.10.4