diff --git a/src/cmd/acme/look.c b/src/cmd/acme/look.c
index a673545..65ee15c 100644
--- a/src/cmd/acme/look.c
+++ b/src/cmd/acme/look.c
@@ -455,10 +455,12 @@
 	b = nil;
 	if(t==nil || t->w==nil)
 		goto Rescue;
+	if(dodollarsigns && n>=1 && r[0]=='$')
+		expandenv(&r, &n);
 	nt = t->w->tag.file->b.nc;
 	if(nt == 0)
 		goto Rescue;
-	if(n>=1 &&  r[0]=='/')
+	if(n>=1 && r[0]=='/')
 		goto Rescue;
 	b = runemalloc(nt+n+1);
 	bufread(&t->w->tag.file->b, 0, b, nt);
@@ -472,9 +474,12 @@
 	}
 	if(slash < 0)
 		goto Rescue;
-	runemove(b+slash+1, r, n);
+	slash++;
+	if(dodollarsigns && expandenv(&b, &slash))
+		b = runerealloc(b, slash+n);
+	runemove(b+slash, r, n);
 	free(r);
-	return cleanrname(runestr(b, slash+1+n));
+	return cleanrname(runestr(b, slash+n));
 
     Rescue:
 	free(b);
@@ -535,7 +540,7 @@
 	if(n == 0)
 		return FALSE;
 	/* see if it's a file name */
-	r = runemalloc(n);
+	r = runemalloc(n+1);	/* +1 for possible $ below */
 	bufread(&t->file->b, q0, r, n);
 	/* first, does it have bad chars? */
 	nname = -1;
@@ -551,9 +556,12 @@
 	}
 	if(nname == -1)
 		nname = n;
-	for(i=0; i<nname; i++)
+	for(i=0; i<nname; i++){
+		if(dodollarsigns && i==0 && r[0]=='$')
+			continue;
 		if(!isfilec(r[i]))
 			goto Isntfile;
+	}
 	/*
 	 * See if it's a file name in <>, and turn that into an include
 	 * file name if so.  Should probably do it for "" too, but that's not
@@ -568,9 +576,13 @@
 	else if(amin == q0)
 		goto Isfile;
 	else{
-		rs = dirname(t, r, nname);
-		r = rs.r;
-		nname = rs.nr;
+		if(dodollarsigns && r[0] == '$')
+			expandenv(&r, &nname);
+		else{
+			rs = dirname(t, r, nname);
+			r = rs.r;
+			nname = rs.nr;
+		}
 	}
 	e->bname = runetobyte(r, nname);
 	/* if it's already a window name, it's a file */
