ref: 121863be9cb7553a35fc70d7b4472adc17910eed
parent: 8a141b2e876cae0532bcd09a8d439d61e3c8a2a7
author: Ori Bernstein <ori@eigenstate.org>
date: Tue Nov 24 00:54:31 EST 2020
mbox: only redraw messages on changes When the flags haven't changed, rerdawing just leads to a jumping cursor. Don't do that.
--- a/mail.h
+++ b/mail.h
@@ -167,7 +167,6 @@
void winsetsel(Win*, int, int);
/* messages */
-Mesg *mblookupid(char*);
Mesg *mesglookup(char*, char*);
Mesg *mesgload(char*);
Mesg *mesgopen(char*, char*);
@@ -177,6 +176,7 @@
void mesgpath2name(char*, int, char*);
int mesgflagparse(char*, int*);
Biobuf* mesgopenbody(Mesg*);
+
/* mailbox */
void mbredraw(Mesg*, int, int);
--- a/mbox.c
+++ b/mbox.c
@@ -311,15 +311,17 @@
}
static Mesg*
-change(char *name, char *digest)
+change(char *name, char *digest, int *cf)
{
Mesg *m;
char *f;
+ int old;
if((m = mesglookup(name, digest)) == nil)
return nil;
if((f = rslurp(m, "flags", nil)) == nil)
return nil;
+ old = m->flags;
free(m->mflags);
m->mflags = f;
m->flags = 0;
@@ -326,6 +328,7 @@
if(strchr(m->mflags, 'd')) m->flags |= Fdel;
if(strchr(m->mflags, 's')) m->flags |= Fseen;
if(strchr(m->mflags, 'a')) m->flags |= Fresp;
+ *cf = (old != m->flags);
return m;
}
@@ -791,7 +794,7 @@
{
char *digest, *action;
Mesg *m, *r;
- int ln, nr;
+ int ln, nr, cf;
digest = plumblookup(pm->attr, "digest");
action = plumblookup(pm->attr, "mailtype");
@@ -832,7 +835,7 @@
if((m = delete(pm->data, digest)) != nil)
mbredraw(m, 0, 0);
}else if(strcmp(action, "modify") == 0){
- if((m = change(pm->data, digest)) != nil)
+ if((m = change(pm->data, digest, &cf)) != nil && cf)
mbredraw(m, 0, 0);
}
}