Commit Diff


commit - ac963cb3f58e13555336bc9c33e4e9591f9c914e
commit + 3fd51250be8cd6f6ac5df5342d3b81e6ed1c01a9
blob - 9d1fa1d154aed9bcda303b224f53f23d3da5ef44
blob + e62330a3e09ecb7e084fd5aaea3d0fb7be5cfcae
--- src/cmd/9term/9term.c
+++ src/cmd/9term/9term.c
@@ -322,7 +322,7 @@ button2menu(Window *w)
 		break;
 
 	case Paste:
-	//XXX	getsnarf();
+		riogetsnarf();
 		wpaste(w);
 		wscrdraw(w);
 		break;
@@ -332,7 +332,7 @@ button2menu(Window *w)
 		break;
 
 	case Send:
-	//XXX	getsnarf();
+		riogetsnarf();
 		wsnarf(w);
 		if(nsnarf == 0)
 			break;
@@ -502,6 +502,34 @@ rcinputproc(void *arg)
 			threadexitsall(nil);
 		if(s)
 			setecho(sfd, s);
+	}
+}
+
+void
+rioputsnarf(void)
+{
+	char *s;
+	
+	s = smprint("%.*S", nsnarf, snarf);
+	if(s){
+		putsnarf(s);
+		free(s);
 	}
 }
 
+void
+riogetsnarf(void)
+{
+	char *s;
+	int n, nb, nulls;
+
+fprint(2, "getsnarf\n");
+	s = getsnarf();
+	if(s == nil)
+		return;
+	n = strlen(s)+1;
+	free(snarf);
+	snarf = runemalloc(n);
+	cvttorunes(s, n, snarf, &nb, &nsnarf, &nulls);
+	free(s);
+}
blob - 2d31ad882dae0b6431f9cbae9f1f08435ae0d25d
blob + a0ae686af817ee85df6cddfd408a7bf3a9b5a52d
--- src/cmd/9term/fns.h
+++ src/cmd/9term/fns.h
@@ -35,3 +35,7 @@ void	winterrupt(Window*);
 #define	runemalloc(n)		malloc((n)*sizeof(Rune))
 #define	runerealloc(a, n)	realloc(a, (n)*sizeof(Rune))
 #define	runemove(a, b, n)	memmove(a, b, (n)*sizeof(Rune))
+
+void rioputsnarf(void);
+void riogetsnarf(void);
+
blob - 781a91d585aba8cdecda88d2835c61c1dd5d7069
blob + 2eb2e63872a1563c182bcb008ebf0c2ae7bbdd83
--- src/cmd/9term/wind.c
+++ src/cmd/9term/wind.c
@@ -772,7 +772,7 @@ wsnarf(Window *w)
 	snarf = runerealloc(snarf, nsnarf);
 	snarfversion++;	/* maybe modified by parent */
 	runemove(snarf, w->r+w->q0, nsnarf);
-//XXX	putsnarf();
+	rioputsnarf();
 }
 
 void
@@ -1034,7 +1034,7 @@ wselect(Window *w)
 			}else{
 				if(first){
 					first = 0;
-					getsnarf();
+					riogetsnarf();
 				}
 				wpaste(w);
 			}