Commit Diff


commit - 7d9c0f0f0e041051d3105404ada074cf983cd6ad
commit + 6a6c2663bfd42eab68cc53c42a499798ae6332a3
blob - 6d4349ba8918a37f13a734f565effd00a4a6eb58
blob + 926d806bf2d7cb3a926114c8e09754fe95ad8a5c
--- src/cmd/9term/win.c
+++ src/cmd/9term/win.c
@@ -108,8 +108,16 @@ hangupnote(void *a, char *msg)
 		noted(NDFLT);
 	}
 	if(strstr(msg, "child")){
-		/* bug: do better */
-		threadexitsall(0);
+		char buf[128];
+		int n;
+
+		n = awaitnohang(buf, sizeof buf-1);
+		if(n > 0){
+			buf[n] = 0;
+			if(atoi(buf) == pid)
+				threadexitsall(0);
+		}
+		noted(NCONT);
 	}
 	noted(NDFLT);
 }
@@ -357,10 +365,22 @@ stdinproc(void *v)
 			print("unknown message %c%c\n", e.c1, e.c2);
 			break;
 
-		case 'E':	/* write to body; can't affect us */
-			if(debug)
-				fprint(2, "shift typing %d... ", e.q1-e.q0);
-			q.p += e.q1-e.q0;
+		case 'E':	/* write to body or tag; can't affect us */
+			switch(e.c2){
+			case 'I':
+			case 'D':		/* body */
+				if(debug)
+					fprint(2, "shift typing %d... ", e.q1-e.q0);
+				q.p += e.q1-e.q0;
+				break;
+			
+			case 'i':
+			case 'd':		/* tag */
+				break;
+			
+			default:
+				goto Unknown;
+			}
 			break;
 
 		case 'F':	/* generated by our actions; ignore */