summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorumbraticus@prosimetrum.com <umbraticus@prosimetrum.com>2022-04-16 06:53:35 +0000
committerqwx <qwx@sciops.net>2022-04-16 06:53:35 +0000
commitd606d83ed85953a761f7e08ff3f18459d7b29c34 (patch)
treecefcda98f85b3286e260fb4a732b359f9d386420
parent78953b41e400ecc9854c0d66acc48380f1482d7c (diff)
make = command's output plumbable
This patch makes sam's = cmd output what seems to me a more useful (plumbable) format: /full/path/to/file:addr , where addr is line(s) under = and rune(s) under =#.
-rw-r--r--sys/man/1/sam4
-rw-r--r--sys/src/cmd/sam/sam.c24
2 files changed, 20 insertions, 8 deletions
diff --git a/sys/man/1/sam b/sys/man/1/sam
index 0d9d75ab5..f107b3c79 100644
--- a/sys/man/1/sam
+++ b/sys/man/1/sam
@@ -403,10 +403,10 @@ Print the text in the range.
Set dot.
.TP
.B =
-Print the line address and character address of the range.
+Print the file name and line address of the range.
.TP
.B =#
-Print just the character address of the range.
+Print the file name and character address of the range.
.PD
.SS File commands
.PD 0
diff --git a/sys/src/cmd/sam/sam.c b/sys/src/cmd/sam/sam.c
index d1b53c2ff..14370bdf4 100644
--- a/sys/src/cmd/sam/sam.c
+++ b/sys/src/cmd/sam/sam.c
@@ -688,11 +688,27 @@ nlcount(File *f, Posn p0, Posn p1)
}
void
-printposn(File *f, int charsonly)
+printposn(File *f, int chars)
{
Posn l1, l2;
+ char *s;
- if(!charsonly){
+ if(f->name.s[0]){
+ if(f->name.s[0]!='/'){
+ getcurwd();
+ s = Strtoc(&curwd);
+ dprint("%s", s);
+ free(s);
+ }
+ s = Strtoc(&f->name);
+ dprint("%s:", s);
+ free(s);
+ }
+ if(chars){
+ dprint("#%lud", addr.r.p1);
+ if(addr.r.p2 != addr.r.p1)
+ dprint(",#%lud", addr.r.p2);
+ }else{
l1 = 1+nlcount(f, (Posn)0, addr.r.p1);
l2 = l1+nlcount(f, addr.r.p1, addr.r.p2);
/* check if addr ends with '\n' */
@@ -701,11 +717,7 @@ printposn(File *f, int charsonly)
dprint("%lud", l1);
if(l2 != l1)
dprint(",%lud", l2);
- dprint("; ");
}
- dprint("#%lud", addr.r.p1);
- if(addr.r.p2 != addr.r.p1)
- dprint(",#%lud", addr.r.p2);
dprint("\n");
}