Commit Diff


commit - c935adc6a2b4bcaa1729edf50ed91bfce9c0df91
commit + c21d0ab45b22db49ab83936a3bab4007f33187ee
blob - 61ac1faa3345aa220e7ed0dad87788c7f61bdf85
blob + cc85e95ef0b9dda3d9732b04cac971d04a906031
--- src/cmd/9term/9term.c
+++ src/cmd/9term/9term.c
@@ -103,13 +103,13 @@ threadmain(int argc, char *argv[])
 	deletechan = chancreate(sizeof(char*), 0);
 
 	timerinit();
+	servedevtext();
 	rcpid = rcstart(argc, argv, &rcfd, &sfd);
 	w = new(screen, FALSE, scrolling, rcpid, ".", nil, nil);
 
 	threadcreate(keyboardthread, nil, STACK);
 	threadcreate(mousethread, nil, STACK);
 	threadcreate(resizethread, nil, STACK);
-	servedevtext();
 
 	proccreate(rcoutputproc, nil, STACK);
 	proccreate(rcinputproc, nil, STACK);
@@ -606,6 +606,10 @@ textproc(void *arg)
 	fd = (int)arg;
 	p = buf;
 	ep = buf+sizeof buf;
+	if(w == nil){
+		close(fd);
+		return;
+	}
 	end = w->org+w->nr;	/* avoid possible output loop */
 	for(i=w->org;; i++){
 		if(i >= end || ep-p < UTFmax){
blob - c59f08ec3379d52cdab03d02071be31e8e746799
blob + e9d7ab0fe84b6dea9abd324446d389626314433c
--- src/cmd/9term/wind.c
+++ src/cmd/9term/wind.c
@@ -328,7 +328,8 @@ winctl(void *arg)
 			recv(cwm.cw, &pair);
 			rp = pair.s;
 			nr = pair.ns;
-			up = bp = rp;
+			bp = rp;
+			up = rp;
 			initial = 0;
 			for(i=0; i<nr; i++){
 				switch(*bp){
@@ -340,7 +341,6 @@ winctl(void *arg)
 					else
 						--up;
 					break;
-/*
 				case '\r':
 					while(i<nr-1 && *(bp+1) == '\r'){
 						bp++;
@@ -354,7 +354,6 @@ winctl(void *arg)
 					}else if(i == nr-1)
 						*up = '\n';
 					break;
-*/
 				default:
 					*up++ = *bp;
 					break;
@@ -368,8 +367,7 @@ winctl(void *arg)
 				wdelete(w, qh, qh+initial);
 				w->qh = qh;
 			}
-			nr = rp - up;
-			rp[nr] = 0;
+			nr = up - rp;
 			w->qh = winsert(w, rp, nr, w->qh)+nr;
 			if(w->scrolling || w->mouseopen)
 				wshow(w, w->qh);