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");
--
⑨