From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eigenstate.org ([206.124.132.107]) by ewsd; Mon Nov 18 16:28:17 EST 2019 Received: from eigenstate.org (localhost [127.0.0.1]) by eigenstate.org (OpenSMTPD) with ESMTP id 5f73d5b1 for <9front@9front.org>; Mon, 18 Nov 2019 13:28:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=eigenstate.org; h= message-id:to:subject:date:from:mime-version:content-type :content-transfer-encoding; s=mail; bh=Pcu+6laULPEJW6ypUf46Kh6Uj 6s=; b=Fi2m3Lpm1tEKEhhtGB7RH0rA7b45GyZkuVteL7QOOmdmTsf/v2TWThlV0 TYBdoSSnxrYrD8bA0qtUU9ofR3/LLUZPfO2S3W22yhh+TY1vSOtfMOdDaA2xXQrz G0sKSRQqAby2ew0HB23Wlz+gU6b4hrYSh+WEHipRs5MwzKi7JU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=eigenstate.org; h=message-id :to:subject:date:from:mime-version:content-type :content-transfer-encoding; q=dns; s=mail; b=BkrQS6jRzCoik5DjN5N OfobXBJEi4ssTlpFGPIVi5VZQaXZTKXq8yUbH6+K5Qipig2yDyb7vopv0zK2qUrV 9FJ/zdlzh/SPOqaSxuM+L7JXDNCrDDcDvg3KorFOXebOTJf40is4kjB0ht1yRgdD KPZrc7eqSXqohGYd3Aoq6zug= Received: from abbatoir.hsd1.ca.comcast.net (c-76-21-119-139.hsd1.ca.comcast.net [76.21.119.139]) by eigenstate.org (OpenSMTPD) with ESMTPSA id fac9f39c (TLSv1.2:ECDHE-RSA-AES256-SHA:256:NO) for <9front@9front.org>; Mon, 18 Nov 2019 13:28:13 -0800 (PST) Message-ID: To: 9front@9front.org Subject: [Patch] show read flags in acme. Date: Mon, 18 Nov 2019 13:28:13 -0800 From: ori@eigenstate.org MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: extended social information backend Not sure how many people still use acme Mail, or are as bad at remembering what they've already read as I am (especially in long threads), but this has been bugging me for a while, so I patched it. Using it now, if I dont' find bugs, and nobody objects, I'll commit in the next day or two. diff -r 9ad06889a5d1 sys/src/cmd/upas/Mail/dat.h --- a/sys/src/cmd/upas/Mail/dat.h Mon Nov 18 01:06:02 2019 -0800 +++ b/sys/src/cmd/upas/Mail/dat.h Mon Nov 18 13:17:50 2019 -0800 @@ -70,6 +70,7 @@ char *disposition; char *filename; char *digest; + char *flags; Message *next; /* next in this mailbox */ Message *prev; /* prev in this mailbox */ diff -r 9ad06889a5d1 sys/src/cmd/upas/Mail/mesg.c --- a/sys/src/cmd/upas/Mail/mesg.c Mon Nov 18 01:06:02 2019 -0800 +++ b/sys/src/cmd/upas/Mail/mesg.c Mon Nov 18 13:17:50 2019 -0800 @@ -132,7 +132,7 @@ /* m->messageid = */ free(line(p, &p)); /* m->lines = */ free(line(p, &p)); /* m->size = */ free(line(p, &p)); - /* m->flags = */ free(line(p, &p)); + m->flags = line(p, &p); /* m->fileid = */ free(line(p, &p)); m->fromcolon = fc(m, line(p, &p)); @@ -308,14 +308,36 @@ return s == e? 0: -1; } + void setflags(Message *m, char *f) { - char *t; + char *flgchar = "aDdfrsS"; + char *t, *p; + int rm; t = smprint("%s/%s", mbox.name, m->name); writefile(t, "flags", f); free(t); + for(; *f; f++){ + rm = 0; + if(*f == '-'){ + rm = 1; + f++; + } + if((p = strchr(flgchar, *f)) != nil) + m->flags[p - flgchar] = rm ? '-' : *f; + } +} + +void +fmtflags(char *b, char *flg) +{ + *b++ = '['; + *b++ = (strchr(flg, 's') == nil) ? '*' : ' '; + *b++ = (strchr(flg, 'a') == nil) ? ' ' : 'R'; + *b++ = ']'; + *b = '\0'; } char* @@ -324,13 +346,14 @@ char *i; int j, len, lens; char *p; - char fmt[80], s[80]; + char fmt[80], s[80], flg[16]; if (ogf) p=m->to; else p=m->fromcolon; + fmtflags(flg, m->flags); if(ind==0 && altmenu){ len = 12; lens = 20; @@ -369,6 +392,7 @@ } i = estrdup(""); + i = eappend(i, " ", flg); i = eappend(i, "\t", p); i = egrow(i, "\t", stripdate(m->date)); if(ind == 0){ @@ -538,6 +562,25 @@ } void +mesgmenureflag(Window *w, Message *m) +{ + char *buf, flg[16]; + + fmtflags(flg, m->flags); + print("flags: %s\n", flg); + buf = name2regexp(deletedrx01, m->name); + strcat(buf, "+/\\[[^\\]]*\\]/"); + if(w->data < 0) + w->data = winopenfile(w, "data"); + if(winselect(w, buf, 1)) + write(w->data, flg, strlen(flg)); + free(buf); + + close(w->data); + w->data = -1; +} + +void mesgmenumark(Window *w, char *which, char *mark) { char *buf; @@ -570,6 +613,7 @@ free(m->type); free(m->disposition); free(m->filename); + free(m->flags); free(m->digest); } @@ -1312,6 +1356,7 @@ winclean(m->w); m->opened = 1; setflags(m, "s"); + mesgmenureflag(mbox->w, m); if(ndirelem == 1){ free(u); return 1;