shithub: fork

Download patch

ref: d86f0a0e4d629b5e6ac0fa23132ca098cc8c8bdd
parent: 738cfd74ecbbce953831e979b3f3773f244f28a9
author: qwx <qwx@sciops.net>
date: Sun Apr 20 12:17:47 EDT 2025

jam: sync with sam

--- a/sys/src/cmd/jam/moveto.c
+++ b/sys/src/cmd/jam/moveto.c
@@ -142,12 +142,27 @@
 void
 stretchsel(File *f, Posn p1, int mode)
 {
-	int c, i;
-	Rune *r, *l;
+	int c, i, lc, rc;
+	Rune *r, *l, *x;
 	Posn p;
 
 	if(p1 > f->nc)
 		return;
+	if(mode){
+		lc = f->dot.r.p1 > 0     ? filereadc(f, f->dot.r.p1-1) : '\n';
+		rc = f->dot.r.p2 < f->nc ? filereadc(f, f->dot.r.p2)   : '\n';
+		for(i=0; left[i]; i++){
+			l = left[i];
+			r = right[i];
+			x = strrune(l, lc);
+			if(x && r[x-l] == rc){
+				f->dot.r.p1 -= lc != '\n';
+				f->dot.r.p2++;
+				return;
+			}
+		}
+	}
+
 	f->dot.r.p1 = f->dot.r.p2 = p1;
 	for(i=0; left[i]; i++){
 		l = left[i];
--- a/sys/src/cmd/jam/shell.c
+++ b/sys/src/cmd/jam/shell.c
@@ -46,7 +46,6 @@
 	long l;
 	int m;
 	int pid, fd;
-	int retcode;
 	char *retmsg;
 	int pipe1[2], pipe2[2];
 
@@ -96,20 +95,21 @@
 				 */
 				close(pipe2[0]);
 				io = pipe2[1];
-				if(retcode=!setjmp(mainloop)){	/* assignment = */
-					char *c;
-					for(l = 0; l<plan9buf.nc; l+=m){
-						m = plan9buf.nc-l;
-						if(m>BLOCKSIZE-1)
-							m = BLOCKSIZE-1;
-						bufread(&plan9buf, l, genbuf, m);
-						genbuf[m] = 0;
-						c = Strtoc(tmprstr(genbuf, m+1));
-						Write(pipe2[1], c, strlen(c));
-						free(c);
-					}
+				if(setjmp(mainloop))
+					exits("error");
+
+				char *c;
+				for(l = 0; l<plan9buf.nc; l+=m){
+					m = plan9buf.nc-l;
+					if(m>BLOCKSIZE-1)
+						m = BLOCKSIZE-1;
+					bufread(&plan9buf, l, genbuf, m);
+					genbuf[m] = 0;
+					c = Strtoc(tmprstr(genbuf, m+1));
+					Write(pipe2[1], c, strlen(c));
+					free(c);
 				}
-				exits(retcode? "error" : 0);
+				exits(nil);
 			}
 			if(pid==-1){
 				fprint(2, "Can't fork?!\n");
--