win: add cook/nocook

R=rsc
http://codereview.appspot.com/2162042
This commit is contained in:
Russ Cox 2010-09-10 09:31:56 -04:00
parent 77929f8261
commit 875351f44f

View file

@ -54,6 +54,7 @@ int ntyper;
int ntypebreak; int ntypebreak;
int debug; int debug;
int rcfd; int rcfd;
int cook;
char *name; char *name;
@ -178,7 +179,7 @@ threadmain(int argc, char **argv)
putenv("winid", buf); putenv("winid", buf);
sprint(buf, "%d/tag", id); sprint(buf, "%d/tag", id);
fd = fsopenfd(fs, buf, OWRITE|OCEXEC); fd = fsopenfd(fs, buf, OWRITE|OCEXEC);
write(fd, " Send Noscroll", 1+4+1+8); write(fd, " Send Nocook Noscroll", 1+4+1+6+1+8);
close(fd); close(fd);
sprint(buf, "%d/event", id); sprint(buf, "%d/event", id);
eventfd = fsopen(fs, buf, ORDWR|OCEXEC); eventfd = fsopen(fs, buf, ORDWR|OCEXEC);
@ -414,7 +415,7 @@ stdinproc(void *v)
case 'D': case 'D':
n = delete(&e); n = delete(&e);
q.p -= n; q.p -= n;
if(!isecho(fd0)) if(!cook && !isecho(fd0))
sendbs(fd0, n); sendbs(fd0, n);
break; break;
@ -445,6 +446,14 @@ stdinproc(void *v)
fsprint(ctlfd, "noscroll"); fsprint(ctlfd, "noscroll");
break; break;
} }
if(cistrcmp(buf, "cook") == 0) {
cook = 1;
break;
}
if(cistrcmp(buf, "nocook") == 0) {
cook = 0;
break;
}
if(e.flag & 8){ if(e.flag & 8){
if(e.q1 != e.q0){ if(e.q1 != e.q0){
sende(&e, fd0, cfd, afd, dfd, 0); sende(&e, fd0, cfd, afd, dfd, 0);
@ -676,7 +685,7 @@ sendtype(int fd0)
{ {
int i, n, nr, raw; int i, n, nr, raw;
raw = !isecho(fd0); raw = !cook && !isecho(fd0);
while(ntypebreak || (raw && ntypeb > 0)){ while(ntypebreak || (raw && ntypeb > 0)){
for(i=0; i<ntypeb; i++) for(i=0; i<ntypeb; i++)
if(typing[i]=='\n' || typing[i]==0x04 || (i==ntypeb-1 && raw)){ if(typing[i]=='\n' || typing[i]==0x04 || (i==ntypeb-1 && raw)){
@ -684,7 +693,7 @@ sendtype(int fd0)
ntypebreak--; ntypebreak--;
n = i+1; n = i+1;
i++; i++;
if(isecho(fd0)) if(!raw)
echoed(typing, n); echoed(typing, n);
if(write(fd0, typing, n) != n) if(write(fd0, typing, n) != n)
error("sending to program"); error("sending to program");
@ -772,7 +781,7 @@ type(Event *e, int fd0, CFid *afd, CFid *dfd)
m += nr; m += nr;
} }
} }
if(!isecho(fd0)) { if(!cook && !isecho(fd0)) {
n = sprint(buf, "#%d,#%d", e->q0, e->q1); n = sprint(buf, "#%d,#%d", e->q0, e->q1);
fswrite(afd, buf, n); fswrite(afd, buf, n);
fswrite(dfd, "", 0); fswrite(dfd, "", 0);