| tnew delmesg - plan9port - [fork] Plan 9 from user space | |
| git clone git://src.adamsgaard.dk/plan9port | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit 0d42cc9dcba5ca319a2cdb885811084856319dd3 | |
| parent 06d255079ae3c99ea1e980f85a4386f150d22e44 | |
| 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(-) | |
| --- | |
| 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*,… | |
| 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*); | |
| 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, ar… | |
| - 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); | |
| 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; | |
| } | |