X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gui.c;h=2513db6d4ad17746af1ece48e2b9b4a21a1efbac;hp=8b1b39a876e3ea84cc6cde1800edb4df3bdf026a;hb=d7fd31be838a33e3a55717f80be850b7db55746d;hpb=6570e0e4433a5e5d7987697716a1f993c96eb1bb diff --git a/gui.c b/gui.c index 8b1b39a8..2513db6d 100644 --- a/gui.c +++ b/gui.c @@ -31,7 +31,7 @@ INIT_GUI_ERRLISTS; extern const char *status_item_list[NUM_STAT_ITEMS]; static char *stat_content[NUM_STAT_ITEMS]; -#define STANDARD_STATUS_BAR "para_gui " VERSION " (hit ? for help)" +#define STANDARD_STATUS_BAR "para_gui " PACKAGE_VERSION " (hit ? for help)" static int signal_pipe; @@ -56,8 +56,8 @@ void *bot_win_rb; static unsigned scroll_position; -static int external_cmd_died, curses_active; -static pid_t external_cmd_pid; +static int cmd_died, curses_active; +static pid_t cmd_pid; static int command_pipe = -1; static int audiod_pipe = -1; @@ -339,7 +339,7 @@ static void print_status_bar(void) if (!curses_active) return; wmove(sb.win, 0, 0); - align_str(sb.win,STANDARD_STATUS_BAR, sb.cols, CENTER); + align_str(sb.win, STANDARD_STATUS_BAR, sb.cols, CENTER); wrefresh(sb.win); } @@ -540,7 +540,7 @@ static void print_welcome(void) int ll = conf.loglevel_arg; if (ll > NOTICE) return; - outputf(COLOR_WELCOME, "Welcome to para_gui " VERSION + outputf(COLOR_WELCOME, "Welcome to para_gui " PACKAGE_VERSION " \"" CODENAME "\". Theme: %s", theme.name); wclrtoeol(bot.win); } @@ -735,9 +735,9 @@ reap_next_child: pid = para_reap_child(); if (pid <= 0) return; - if (pid == external_cmd_pid) { - external_cmd_pid = 0; - external_cmd_died = 1; + if (pid == cmd_pid) { + cmd_pid = 0; + cmd_died = 1; } goto reap_next_child; } @@ -867,7 +867,7 @@ static int open_audiod_pipe(void) * * EXTERNAL_MODE: Check only signal pipe. Used when an external command * is running. During that thime curses is disabled. Returns when - * external_cmd_pid == 0. + * cmd_pid == 0. */ static int do_select(int mode) { @@ -893,10 +893,7 @@ repeat: /* command pipe only for COMMAND_MODE */ if (command_pipe >= 0 && mode == COMMAND_MODE) para_fd_set(command_pipe, &rfds, &max_fileno); - if (curses_active) - para_fd_set(STDIN_FILENO, &rfds, &max_fileno); ret = para_select(max_fileno + 1, &rfds, NULL, &tv); -// PARA_DEBUG_LOG("select returned %d\n", ret); if (ret <= 0) goto check_return; /* skip fd checks */ /* signals */ @@ -939,6 +936,16 @@ check_return: if (cp_numread <= 0) cbo = 0; wrefresh(bot.win); + ret = wgetch(top.win); + if (ret != ERR && ret != KEY_RESIZE) { + if (command_pipe) { + close(command_pipe); + command_pipe = -1; + } + if (cmd_pid) + kill(cmd_pid, SIGTERM); + return -1; + } break; case GETCH_MODE: ret = wgetch(top.win); @@ -946,8 +953,8 @@ check_return: return ret; break; case EXTERNAL_MODE: - if (external_cmd_died) { - external_cmd_died = 0; + if (cmd_died) { + cmd_died = 0; return 0; } } @@ -971,13 +978,12 @@ static int send_output(void) static int client_cmd_cmdline(char *cmd) { - pid_t pid; int ret, fds[3] = {0, 1, 0}; char *c = make_message(BINDIR "/para_client %s", cmd); outputf(COLOR_COMMAND, "%s", c); - print_in_bar(COLOR_MSG, "executing client command, hit q to abort\n"); - ret = para_exec_cmdline_pid(&pid, c, fds); + print_in_bar(COLOR_MSG, "executing client command, hit any key to abort\n"); + ret = para_exec_cmdline_pid(&cmd_pid, c, fds); free(c); if (ret < 0) return -1; @@ -990,12 +996,11 @@ static int client_cmd_cmdline(char *cmd) */ static int display_cmd(char *cmd) { - pid_t pid; int fds[3] = {0, 1, 0}; - print_in_bar(COLOR_MSG, "executing display command, hit q to abort"); + print_in_bar(COLOR_MSG, "executing display command, hit any key to abort"); outputf(COLOR_COMMAND, "%s", cmd); - if (para_exec_cmdline_pid(&pid, cmd, fds) < 0) + if (para_exec_cmdline_pid(&cmd_pid, cmd, fds) < 0) return -1; command_pipe = fds[1]; return send_output(); @@ -1008,10 +1013,11 @@ static int external_cmd(char *cmd) { int fds[3] = {-1, -1, -1}; - if (external_cmd_pid) + if (cmd_pid) return -1; shutdown_curses(); - para_exec_cmdline_pid(&external_cmd_pid, cmd, fds); + para_exec_cmdline_pid(&cmd_pid, cmd, fds); + cmd_died = 0; do_select(EXTERNAL_MODE); init_curses(); return 0; @@ -1086,22 +1092,22 @@ static void com_scroll_up(void) { struct rb_entry *rbe = NULL; unsigned lines; - int i, first_rbe, scroll; + int i, first_rbe, num_scroll; /* the entry that is going to vanish */ rbe = ringbuffer_get(bot_win_rb, scroll_position); if (!rbe) goto err_out; - scroll = NUM_LINES(rbe->len); + num_scroll = NUM_LINES(rbe->len); first_rbe = first_visible_rbe(&lines); if (first_rbe < 0 || (first_rbe == ringbuffer_filled(bot_win_rb) - 1)) goto err_out; scroll_position++; - wscrl(bot.win, -scroll); + wscrl(bot.win, -num_scroll); i = draw_top_rbe(&lines); if (i < 0) goto err_out; - while (i > 0 && lines < scroll) { + while (i > 0 && lines < num_scroll) { int rbe_lines; rbe = ringbuffer_get(bot_win_rb, --i); if (!rbe) @@ -1227,7 +1233,8 @@ static void com_enlarge_top_win(void) static void com_version(void) { - print_in_bar(COLOR_MSG, "para_gui " VERSION " \"" CODENAME "\""); + print_in_bar(COLOR_MSG, "para_gui " PACKAGE_VERSION " \"" + CODENAME "\""); } static void com_quit(void)