diff options
Diffstat (limited to 'src/cmd')
-rw-r--r-- | src/cmd/9term/9term.c | 8 | ||||
-rw-r--r-- | src/cmd/9term/rcstart.c | 26 |
2 files changed, 26 insertions, 8 deletions
diff --git a/src/cmd/9term/9term.c b/src/cmd/9term/9term.c index 51e733ab..f183f115 100644 --- a/src/cmd/9term/9term.c +++ b/src/cmd/9term/9term.c @@ -884,12 +884,8 @@ key(Rune r) case 0x7F: /* DEL: send interrupt */ t.qh = t.q0 = t.q1 = t.nr; show(t.q0); -{int x; x=tcgetpgrp(rcfd); -print("postnote %d pgrp %d\n", rcpid, x); - postnote(PNGROUP, x, "interrupt"); -if(x >= 2) killpg(x, 2); -} - // write(rcfd, "\x7F", 1); + // postnote(PNGROUP, x, "interrupt"); + write(rcfd, "\x7F", 1); return; } diff --git a/src/cmd/9term/rcstart.c b/src/cmd/9term/rcstart.c index 7ee49350..ddaadb56 100644 --- a/src/cmd/9term/rcstart.c +++ b/src/cmd/9term/rcstart.c @@ -3,6 +3,25 @@ #include <libc.h> #include "term.h" +static void +sys(char *buf) +{ + char buf2[100]; + char *f[20]; + int nf, pid; + + strcpy(buf2, buf); + nf = tokenize(buf2, f, nelem(f)); + f[nf] = nil; + switch(pid = fork()){ + case 0: + execvp(f[0], f); + _exits("oops"); + default: + waitpid(); + } +} + int rcstart(int argc, char **argv, int *pfd, int *tfd) { @@ -33,11 +52,14 @@ rcstart(int argc, char **argv, int *pfd, int *tfd) dup(sfd, 0); dup(sfd, 1); dup(sfd, 2); - system("stty tabs -onlcr onocr icanon echo erase '^h' intr '^?'"); + sys("stty tabs -onlcr onocr icanon echo erase '^h' intr '^?'"); if(noecho) - system("stty -echo"); + sys("stty -echo"); for(i=3; i<100; i++) close(i); + signal(SIGINT, SIG_DFL); + signal(SIGHUP, SIG_DFL); + signal(SIGTERM, SIG_DFL); execvp(argv[0], argv); fprint(2, "exec %s failed: %r\n", argv[0]); _exits("oops"); |