Commit Diff


commit - dc305d03681e150b97acf4631a514868acd4b276
commit + 8d9f61e1c98c0513358585d3c4a31236b3e3189c
blob - f22bebc50fa81fc4fc608a73af5ac5be20efc9c0
blob + 22dddc737027c78f420187ade6ab7b63b3af7d75
--- src/cmd/9term/9term.c
+++ src/cmd/9term/9term.c
@@ -913,37 +913,36 @@ key(Rune r)
 		paste(t.snarf, t.nsnarf, 0);
 		if(scrolling)
 			show(t.q0);
+		consread();
 		return;
 	}
 
-	switch(r) {
-	/* case 0x03:	can't do this because ^C is COPY */
-	case 0x7F:	/* DEL: send interrupt */
-		paste(&r, 1, 1);
-		t.qh = t.q0 = t.q1 = t.nr;
-		show(t.q0);
-		/* must write the interrupt character in case app is in raw mode (e.g., ssh) */
-		write(rcfd, "\x7F", 1);
-	//	postnote(PNGROUP, rcpid, "interrupt");
+	if(rawon() && t.q0 == t.nr){
+		addraw(&r, 1);
+		consread();
 		return;
 	}
 
-	if(rawon() && t.q0==t.nr){
-		addraw(&r, 1);
-		consread();
+	if(r == 0x7F){	/* DEL: send interrupt; what a mess */
+		if(holdon){
+			holdon = 0;
+			drawhold(holdon);
+		}
+		t.qh = t.q0 = t.q1 = t.nr;
+		show(t.q0);
+		write(rcfd, "\x7F", 1);
 		return;
 	}
 
-	if(r==ESC || (holdon && r==0x7F)){	/* toggle hold */
+	if(r==ESC){	/* toggle hold */
 		holdon = !holdon;
 		drawhold(holdon);
-	//	replaceintegerproperty("_9WM_HOLD_MODE", 1, 32, holdon);
+	/*	replaceintegerproperty("_9WM_HOLD_MODE", 1, 32, holdon); */
 		if(!holdon)
 			consread();
-		if(r==ESC)
-			return;
+		return;
 	}
-
+	
 	snarf();
 
 	switch(r) {