diff options
Diffstat (limited to 'bb.c')
| -rw-r--r-- | bb.c | 31 |
1 files changed, 20 insertions, 11 deletions
@@ -535,6 +535,12 @@ static void explore(char *path, int print_dir, int print_selection) _exit(1); return; + case KEY_CTRL_Z: + close_term(); + raise(SIGTSTP); + init_term(); + goto redraw; + case 'q': case 'Q': goto done; @@ -807,26 +813,29 @@ static void explore(char *path, int print_dir, int print_selection) default: for (int i = 0; bindings[i].key; i++) { if (key == bindings[i].key) { - if (!(bindings[i].flags & SILENT)) + term_move(0, height-1); + if (!(bindings[i].flags & ONSCREEN)) close_term(); + else { + // Show cursor: + writez(termfd, "\e[?25h"); + tcsetattr(termfd, TCSAFLUSH, &orig_termios); + close(termfd); + } - int fd; + int scriptinfd; pid_t child; - child = run_cmd(NULL, &fd, bindings[i].command); - + child = run_cmd(NULL, &scriptinfd, bindings[i].command); if (!(bindings[i].flags & NO_FILES)) { if (state.nselected > 0) { - write_selection(fd, state.firstselected); + write_selection(scriptinfd, state.firstselected); } else if (strcmp(state.files[state.cursor]->d_name, "..") != 0) { - write(fd, state.files[state.cursor]->d_name, state.files[state.cursor]->d_namlen); + write(scriptinfd, state.files[state.cursor]->d_name, state.files[state.cursor]->d_namlen); } } - - close(fd); + close(scriptinfd); waitpid(child, NULL, 0); - - if (!(bindings[i].flags & SILENT)) - init_term(); + init_term(); if (bindings[i].flags & CLEAR_SELECTION) clear_selection(&state); |
