Commit Diff


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