Commit Diff


commit - 0b22e9bd85861f6a3c8f0635bd4422daa84343eb
commit + efe12411090ddcb45f524d6b0624ec4493d65175
blob - 20fd9007124189305dddacc10992718db6d19a8a
blob + 5866ddbe59f478cebf51dbfa1b5bc9cf8d09bf63
--- man/man1/label.1
+++ man/man1/label.1
@@ -6,6 +6,9 @@ label, awd \- set window label
 .I string
 .br
 .B awd
+[
+.I sysname
+]
 .SH DESCRIPTION
 .I Label
 sets the label of the current 
@@ -25,6 +28,14 @@ and
 windows assume the label is a directory name.
 When unrooted file names are plumbed in the window,
 they are evaluated relative to the directory named in the label.
+.PP
+The label may have a suffix
+BI /- sysname \fR,
+which is not interpreted as part of the directory during plumbing.
+.I Awd
+sets the window name to the current directory with a
+.BI /- sysname
+suffix, using the name of the current system by default.
 .SH EXAMPLE
 One can use the following
 .IR sh (1)
@@ -64,8 +75,3 @@ fn cd {
 .I Awd
 is also documented in
 .IR acme (1).
-.PP
-.I Awd
-does not append the
-.BI - label
-suffix that it does on Plan 9.
blob - 31c9f28900c07d1b16f8bb8e0db3846139c5ba3f
blob + f22bebc50fa81fc4fc608a73af5ac5be20efc9c0
--- src/cmd/9term/9term.c
+++ src/cmd/9term/9term.c
@@ -1834,7 +1834,8 @@ int
 label(Rune *sr, int n)
 {
 	Rune *sl, *el, *er, *r;
-
+	char *p;
+	
 	er = sr+n;
 	for(r=er-1; r>=sr; r--)
 		if(*r == '\007')
@@ -1854,6 +1855,14 @@ label(Rune *sr, int n)
 	snprint(wdir, sizeof wdir, "%.*S", (el-1)-(sl+3), sl+3);
 	drawsetlabel(wdir);
 
+	/* remove trailing /-sysname if present */
+	p = strrchr(wdir, '/');
+	if(p && *(p+1) == '-'){
+		if(p == wdir)
+			p++;
+		*p = 0;
+	}
+
 	runemove(sl, el, er-el);
 	n -= (el-sl);
 	return n;
blob - a6ef1414c7e0de0c6ca93657f2e9ad2779e73aa3
blob + 37333fcc1470e81723b7056849b9663049bb84e9
--- src/cmd/9term/win.c
+++ src/cmd/9term/win.c
@@ -489,11 +489,11 @@ stdoutproc(void *v)
 	}
 }
 
-char wdir[256];
+char wdir[512];
 int
 label(char *sr, int n)
 {
-	char *sl, *el, *er, *r;
+	char *sl, *el, *er, *r, *p;
 
 	er = sr+n;
 	for(r=er-1; r>=sr; r--)
@@ -503,8 +503,8 @@ label(char *sr, int n)
 		return n;
 
 	el = r+1;
-	if(el-sr > sizeof wdir)
-		sr = el - sizeof wdir;
+	if(el-sr > sizeof wdir - strlen(name) - 20)
+		sr = el - sizeof wdir - strlen(name) - 20;
 	for(sl=el-3; sl>=sr; sl--)
 		if(sl[0]=='\033' && sl[1]==']' && sl[2]==';')
 			break;
@@ -512,7 +512,18 @@ label(char *sr, int n)
 		return n;
 
 	*r = 0;
-	snprint(wdir, sizeof wdir, "name %s/-%s\n0\n", sl+3, name);
+	/*
+	 * add /-sysname if not present
+	 */
+	snprint(wdir, sizeof wdir, "name %s", sl+3);
+	p = strrchr(wdir, '/');
+	if(p==nil || *(p+1) != '-'){
+		p = wdir+strlen(wdir);
+		if(*(p-1) != '/')
+			*p++ = '/';
+		strcpy(p, name);
+	}
+	strcat(wdir, "\n0\n");
 	fswrite(ctlfd, wdir, strlen(wdir));
 
 	memmove(sl, el, er-el);