shithub: ham

Download patch

ref: bcf3db858c6461380f5695a4ed4edd25df52fb5f
parent: 28e7e475832d3d98201e947a0f2f5d7048a08182
author: kvik <kvik@a-b.xyz>
date: Mon Feb 3 16:41:38 EST 2020

Export dot through the environment var %dot

--- a/sam/sam.h
+++ b/sam/sam.h
@@ -272,6 +272,7 @@
 void	moveto(File*, Range);
 File	*newfile(void);
 void	nextmatch(File*, String*, Posn, int);
+Posn nlcount(File *, Posn, Posn);
 void	notifyf(void*, char*);
 void	panic(char*);
 void	printposn(File*, int);
--- a/sam/shell.c
+++ b/sam/shell.c
@@ -10,6 +10,26 @@
 Buffer	cmdbuf;
 int	cmdbufpos;
 
+static void
+updateenv(File *f)
+{
+	char buf[64], *p;
+	
+	if(f == nil){
+		putenv("%", "");
+		putenv("%dot", "");
+		return;
+	}
+	p = Strtoc(&f->name);
+	putenv("%", p);
+	free(p);
+	snprint(buf, sizeof buf, "%lud %lud %lud",
+		1+nlcount(f, 0, f->dot.r.p1),
+		f->dot.r.p1,
+		f->dot.r.p2);
+	putenv("%dot", buf);
+}
+
 int
 plan9(File *f, int type, String *s, int nest)
 {
@@ -93,7 +113,7 @@
 			close(0);	/* so it won't read from terminal */
 			open("/dev/null", 0);
 		}
-		putenv("%", f == nil ? "" : Strtoc(&f->name));
+		updateenv(f);
 		execl(SHPATH, SH, "-c", Strtoc(&plan9cmd), nil);
 		exits("exec");
 	}