tnew delmesg - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 0d42cc9dcba5ca319a2cdb885811084856319dd3
 (DIR) parent 06d255079ae3c99ea1e980f85a4386f150d22e44
 (HTM) Author: rsc <devnull@localhost>
       Date:   Tue, 28 Feb 2006 00:49:05 +0000
       
       new delmesg
       
       Diffstat:
         M src/cmd/acme/mail/dat.h             |       1 +
         M src/cmd/acme/mail/mail.c            |      28 ++++++++++++++++------------
         M src/cmd/acme/mail/mesg.c            |       2 +-
       
       3 files changed, 18 insertions(+), 13 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/acme/mail/dat.h b/src/cmd/acme/mail/dat.h
       t@@ -138,6 +138,7 @@ extern        void                mesgmenumarkdel(Window*, Message*, Message*, int);
        extern        Message*        mesglookup(Message*, char*, char*);
        extern        Message*        mesglookupfile(Message*, char*, char*);
        extern        void                mesgfreeparts(Message*);
       +extern        int                mesgcommand(Message*, char*);
        
        extern        char*        readfile(char*, char*, int*);
        extern        char*        readbody(char*, char*, int*);
 (DIR) diff --git a/src/cmd/acme/mail/mail.c b/src/cmd/acme/mail/mail.c
       t@@ -310,15 +310,22 @@ showmesg(char *name, char *digest)
        }
        
        void
       -delmesg(char *name, char *digest, int dodel)
       +delmesg(char *name, char *digest, int dodel, char *save)
        {
                Message *m;
        
                m = mesglookupfile(&mbox, name, digest);
                if(m != nil){
       -                mesgmenumarkdel(wbox, &mbox, m, 0);
       +                if(save)
       +                        mesgcommand(m, estrstrdup("Save ", save));
                        if(dodel)
       -                        m->writebackdel = 1;
       +                        mesgmenumarkdel(wbox, &mbox, m, 1);
       +                else{
       +                        /* notification came from plumber - message is gone */
       +                        mesgmenudel(wbox, &mbox, m);
       +                        if(!m->opened)
       +                                mesgdel(&mbox, m);
       +                }
                }
        }
        
       t@@ -339,7 +346,7 @@ plumbthread(void)
                        else if(strcmp(type, "new") == 0)
                                newmesg(m->data, digest);
                        else if(strcmp(type, "delete") == 0)
       -                        delmesg(m->data, digest, 0);
       +                        delmesg(m->data, digest, 0, nil);
                        else
                                fprint(2, "Mail: unknown plumb attribute %s\n", type);
                        plumbfree(m);
       t@@ -378,7 +385,7 @@ plumbsendthread(void *v)
        int
        mboxcommand(Window *w, char *s)
        {
       -        char *args[10], **targs;
       +        char *args[10], **targs, *save;
                Message *m, *next;
                int ok, nargs, i, j;
                char buf[128];
       t@@ -430,12 +437,9 @@ mboxcommand(Window *w, char *s)
                        return 1;
                }
                if(strcmp(s, "Delmesg") == 0){
       -                if(nargs > 1){
       -                        for(i=1; i<nargs; i++){
       -                                snprint(buf, sizeof buf, "%s%s", mbox.name, args[i]);
       -                                delmesg(buf, nil, 1);
       -                        }
       -                }
       +                save = nil;
       +                if(nargs > 1)
       +                        save = args[1];
                        s = winselection(w);
                        if(s == nil)
                                return 1;
       t@@ -452,7 +456,7 @@ mboxcommand(Window *w, char *s)
                                if(j == 0)
                                        continue;
                                snprint(buf, sizeof buf, "%s%d", mbox.name, j);
       -                        delmesg(buf, nil, 1);
       +                        delmesg(buf, nil, 1, save);
                        }
                        free(s);
                        free(targs);
 (DIR) diff --git a/src/cmd/acme/mail/mesg.c b/src/cmd/acme/mail/mesg.c
       t@@ -552,7 +552,7 @@ mesgmenudel(Window *w, Message *mbox, Message *m)
                fsclose(w->addr);
                w->addr = nil;
                w->data = nil;
       -        mbox->dirty = 1;
       +/* assume caller knows best        mbox->dirty = 1; */
                m->deleted = 1;
        }