plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

commit 81c2c5e775d83896f25981cf4c4e486c5cc91180
parent 9c611279288ca016aeb214da4a23a8e2cce45027
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:
Mman/man1/acme.1 | 6++++++
Msrc/cmd/acme/acme.c | 3+++
Msrc/cmd/acme/dat.h | 1+
Msrc/cmd/acme/exec.c | 10++++++++--
4 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/man/man1/acme.1 b/man/man1/acme.1 @@ -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 diff --git a/src/cmd/acme/acme.c b/src/cmd/acme/acme.c @@ -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); diff --git a/src/cmd/acme/dat.h b/src/cmd/acme/dat.h @@ -535,6 +535,7 @@ int fsyspid; char *cputype; char *objtype; char *home; +char *acmeshell; char *fontnames[2]; Image *tagcols[NCOL]; Image *textcols[NCOL]; diff --git a/src/cmd/acme/exec.c b/src/cmd/acme/exec.c @@ -1358,6 +1358,7 @@ runproc(void *argvp) char *rcarg[4]; void **argv; CFsys *fs; + char *shell; threadsetname("runproc"); @@ -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; @@ -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; @@ -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 */