aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/acme/look.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2006-06-16 15:55:24 +0000
committerrsc <devnull@localhost>2006-06-16 15:55:24 +0000
commit9361131304f39db29b1bec59d881e585035ec93c (patch)
tree811d2c0fa0dcd0b060ee7c53999557402b7ece00 /src/cmd/acme/look.c
parent6884e49f0c8240d40c82553fd60712a28f140ef3 (diff)
downloadplan9port-9361131304f39db29b1bec59d881e585035ec93c.tar.gz
plan9port-9361131304f39db29b1bec59d881e585035ec93c.tar.bz2
plan9port-9361131304f39db29b1bec59d881e585035ec93c.zip
No more unrooted paths.
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);