From e9e9cb089f8b0e5177bab1c7c48053af09abaa46 Mon Sep 17 00:00:00 2001 From: Ali Gholami Rudi Date: Fri, 12 Aug 2022 12:34:55 +0430 Subject: [PATCH] term: enable switching signals using the second argument of term_exec() Before this change, term_signal() did that. Also, now TERM_PGID is defined only if switching signals are enabled. --- fbpad.c | 15 +++++++-------- fbpad.h | 3 +-- term.c | 8 +++++--- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/fbpad.c b/fbpad.c index f13d4f7..319cb2c 100644 --- a/fbpad.c +++ b/fbpad.c @@ -188,10 +188,10 @@ static void t_split(int n) t_hideshow(aterm(cterm()), 1, cterm(), 3); } -static void t_exec(char **args) +static void t_exec(char **args, int swsig) { if (!tmain()) - term_exec(args); + term_exec(args, swsig); } static void listtags(void) @@ -246,17 +246,16 @@ static void directkey(void) if (c == ESC) { switch ((c = readchar())) { case 'c': - t_exec(shell); + t_exec(shell, 0); return; case ';': - t_exec(shell); - term_signal(tmain()); + t_exec(shell, 1); return; case 'm': - t_exec(mail); + t_exec(mail, 0); return; case 'e': - t_exec(editor); + t_exec(editor, 0); return; case 'j': case 'k': @@ -375,7 +374,7 @@ static void mainloop(char **args) term_redraw(1); if (args) { cmdmode = 1; - t_exec(args); + t_exec(args, 0); } while (!exitit) if (pollterms()) diff --git a/fbpad.h b/fbpad.h index 371b2a6..3df9ab2 100644 --- a/fbpad.h +++ b/fbpad.h @@ -19,13 +19,12 @@ void term_free(struct term *term); void term_load(struct term *term, int visible); void term_save(struct term *term); int term_fd(struct term *term); -void term_signal(struct term *term); void term_hide(struct term *term); void term_show(struct term *term); /* operations on the loaded terminal */ void term_read(void); void term_send(int c); -void term_exec(char **args); +void term_exec(char **args, int swsig); void term_end(void); void term_screenshot(void); void term_scrl(int pos); diff --git a/term.c b/term.c index d02097f..2349577 100644 --- a/term.c +++ b/term.c @@ -419,7 +419,7 @@ static void envset(char **d, char *env) } extern char **environ; -void term_exec(char **args) +void term_exec(char **args, int swsig) { int master, slave; term_zero(term); @@ -431,10 +431,11 @@ void term_exec(char **args) char *envp[256] = {NULL}; char pgid[32]; snprintf(pgid, sizeof(pgid), "TERM_PGID=%d", getpid()); - envcpy(envp, environ, LEN(envp) - 2); + envcpy(envp, environ, LEN(envp) - 3); envset(envp, "TERM=" TERM); envset(envp, pad_fbdev()); - envset(envp, pgid); + if (swsig) + envset(envp, pgid); tio_login(slave); close(master); execvep(args[0], args, envp); @@ -444,6 +445,7 @@ void term_exec(char **args) term->fd = master; term->rows = pad_rows(); term->cols = pad_cols(); + term->signal = swsig; fcntl(term->fd, F_SETFD, fcntl(term->fd, F_GETFD) | FD_CLOEXEC); fcntl(term->fd, F_SETFL, fcntl(term->fd, F_GETFL) | O_NONBLOCK); term_reset(); -- 2.11.4.GIT