URI:
       tacme: add $acmeshell to control execution shell - 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 81c2c5e775d83896f25981cf4c4e486c5cc91180
   DIR parent 9c611279288ca016aeb214da4a23a8e2cce45027
  HTML Author: Marius Eriksen <marius.eriksen@gmail.com>
       Date:   Sun, 21 Oct 2012 16:52:08 -0400
       
       acme: add $acmeshell to control execution shell
       
       R=rsc
       CC=plan9port.codebot
       http://codereview.appspot.com/6614056
       
       Diffstat:
         M man/man1/acme.1                     |       6 ++++++
         M src/cmd/acme/acme.c                 |       3 +++
         M src/cmd/acme/dat.h                  |       1 +
         M src/cmd/acme/exec.c                 |      10 ++++++++--
       
       4 files changed, 18 insertions(+), 2 deletions(-)
       ---
   DIR diff --git a/man/man1/acme.1 b/man/man1/acme.1
       t@@ -533,6 +533,12 @@ and
        set to the window's id number
        (see
        .IR acme (4)).
       +.PP
       +The environment variable
       +.B $acmeshell
       +determines which shell is used to execute such commands; the
       +.IR rc (1)
       +shell is used by default. 
        .SS "Mouse button 3
        Pointing at text with button 3 instructs
        .I acme
   DIR diff --git a/src/cmd/acme/acme.c b/src/cmd/acme/acme.c
       t@@ -133,6 +133,9 @@ threadmain(int argc, char *argv[])
                cputype = getenv("cputype");
                objtype = getenv("objtype");
                home = getenv("HOME");
       +        acmeshell = getenv("acmeshell");
       +        if(acmeshell && *acmeshell == '\0')
       +                acmeshell = nil;
                p = getenv("tabstop");
                if(p != nil){
                        maxtab = strtoul(p, nil, 0);
   DIR diff --git a/src/cmd/acme/dat.h b/src/cmd/acme/dat.h
       t@@ -535,6 +535,7 @@ int                        fsyspid;
        char                        *cputype;
        char                        *objtype;
        char                        *home;
       +char                        *acmeshell;
        char                        *fontnames[2];
        Image                *tagcols[NCOL];
        Image                *textcols[NCOL];
   DIR diff --git a/src/cmd/acme/exec.c b/src/cmd/acme/exec.c
       t@@ -1358,6 +1358,7 @@ runproc(void *argvp)
                char *rcarg[4];
                void **argv;
                CFsys *fs;
       +        char *shell;
        
                threadsetname("runproc");
        
       t@@ -1467,6 +1468,8 @@ runproc(void *argvp)
        
                if(argaddr)
                        putenv("acmeaddr", argaddr);
       +        if(acmeshell != nil)
       +                goto Hard;
                if(strlen(t) > sizeof buf-10)        /* may need to print into stack */
                        goto Hard;
                inarg = FALSE;
       t@@ -1576,7 +1579,10 @@ Hard:
                        chdir(dir);        /* ignore error: probably app. window */
                        free(dir);
                }
       -        rcarg[0] = "rc";
       +        shell = acmeshell;
       +        if(shell == nil)
       +                shell = "rc";
       +        rcarg[0] = shell;
                rcarg[1] = "-c";
                rcarg[2] = t;
                rcarg[3] = nil;
       t@@ -1590,7 +1596,7 @@ Hard:
                                sendul(cpid, ret);
                        threadexits(nil);
                }
       -        warning(nil, "exec rc: %r\n");
       +        warning(nil, "exec %s: %r\n", shell);
        
           Fail:
                /* threadexec hasn't happened, so send a zero */