aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/acme/look.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/acme/look.c')
-rw-r--r--src/cmd/acme/look.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/cmd/acme/look.c b/src/cmd/acme/look.c
index 6abac6ca..a048a353 100644
--- a/src/cmd/acme/look.c
+++ b/src/cmd/acme/look.c
@@ -696,6 +696,7 @@ openfile(Text *t, Expand *e, int newwindow)
Window *w, *ow;
int eval, i, n;
Rune *rp;
+ Runestr rs;
uint dummy;
r.q0 = 0;
@@ -704,8 +705,29 @@ openfile(Text *t, Expand *e, int newwindow)
w = t->w;
if(w == nil)
return nil;
- }else
+ }else{
w = lookfile(e->name, e->nname);
+ if(w == nil && e->name[0] != '/'){
+ /*
+ * Unrooted path in new window.
+ * This can happen if we type a pwd-relative path
+ * in the topmost tag or the column tags.
+ * Most of the time plumber takes care of these,
+ * but plumber might not be running or might not
+ * be configured to accept plumbed directories.
+ * Make the name a full path, just like we would if
+ * opening via the plumber.
+ */
+ n = utflen(wdir)+1+e->nname+1;
+ rp = runemalloc(n);
+ runesnprint(rp, n, "%s/%.*S", wdir, e->nname, e->name);
+ rs = cleanrname(runestr(rp, n-1));
+ free(e->name);
+ e->name = rs.r;
+ e->nname = rs.nr;
+ w = lookfile(e->name, e->nname);
+ }
+ }
if(w){
if(newwindow==TRUE && !w->isdir)
w = coladd(w->col, nil, w, -1);