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 */