URI: 
       tAdd dollarsign support. - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit d5c40a0da2889b9ff4ad8e23258da297489a701d
   DIR parent d96da29b373306ea72f99d61e524e7337112652c
  HTML Author: rsc <devnull@localhost>
       Date:   Mon, 14 Mar 2005 21:02:14 +0000
       
       Add dollarsign support.
       
       Diffstat:
         M src/cmd/acme/look.c                 |      28 ++++++++++++++++++++--------
       
       1 file changed, 20 insertions(+), 8 deletions(-)
       ---
   DIR diff --git a/src/cmd/acme/look.c b/src/cmd/acme/look.c
       t@@ -455,10 +455,12 @@ dirname(Text *t, Rune *r, int n)
                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);
       t@@ -472,9 +474,12 @@ dirname(Text *t, Rune *r, int n)
                }
                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);
       t@@ -535,7 +540,7 @@ expandfile(Text *t, uint q0, uint q1, Expand *e)
                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;
       t@@ -551,9 +556,12 @@ expandfile(Text *t, uint q0, uint q1, Expand *e)
                }
                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
       t@@ -568,9 +576,13 @@ expandfile(Text *t, uint q0, uint q1, Expand *e)
                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 */