aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2019-11-11 10:25:15 -0800
committerBruce Hill <bruce@bruce-hill.com>2019-11-11 10:25:15 -0800
commit000b652ac011b5c71dcfd711f99c70cc20891953 (patch)
tree754464d1f0d4cea3798bda2a0fad354fb1d00fa9
parentd4f887d8534216811de65c4fd21a6268b0235847 (diff)
Simplified "+help" binding by using a temp file and run_script()
-rw-r--r--bb.c30
1 files changed, 8 insertions, 22 deletions
diff --git a/bb.c b/bb.c
index 9307b3e..1b14a18 100644
--- a/bb.c
+++ b/bb.c
@@ -663,28 +663,14 @@ void run_bbcmd(bb_t *bb, const char *cmd)
set_cursor(bb, e->index);
else try_free_entry(e);
} else if (matches_cmd(cmd, "help")) { // +help
- restore_term(&default_termios);
- int fds[2];
- pipe(fds);
- proc_t *proc = memcheck(calloc(1, sizeof(proc_t)));
- if ((proc->pid = fork()) == 0) {
- fclose(tty_out); tty_out = NULL;
- fclose(tty_in); tty_in = NULL;
- setpgid(0, 0);
- close(fds[1]);
- dup2(fds[0], STDIN_FILENO);
- char *args[] = {SH, "-c", "less -rKX", NULL};
- execvp(SH, args);
- }
- LL_PREPEND(running_procs, proc, running);
- signal(SIGTTOU, SIG_IGN);
- tcsetpgrp(fileno(tty_out), proc->pid);
- close(fds[0]);
- print_bindings(fds[1]);
- close(fds[1]);
- wait_for_process(&proc);
- init_term();
- dirty = 1;
+ char filename[256] = "/tmp/bbhelp.XXXXXX";
+ int fd = mkostemp(filename, O_WRONLY);
+ print_bindings(fd);
+ close(fd);
+ char script[512] = "less -rKX < ";
+ strcat(script, filename);
+ run_script(bb, script);
+ unlink(filename);
} else if (matches_cmd(cmd, "interleave:") || matches_cmd(cmd, "interleave")) { // +interleave
set_bool(bb->interleave_dirs);
sort_files(bb);