X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gui.c;h=d779ff864ddebfc38a34ba1a0d166b5c04089556;hp=0c8aceaefdf3924b3418bf0d3c6b18814de8806b;hb=62c0894fbb589dd45e69b7d9ef1fd152a9960d62;hpb=90023251721ca8540523f30499ddc5adbe39c19e diff --git a/gui.c b/gui.c index 0c8aceae..d779ff86 100644 --- a/gui.c +++ b/gui.c @@ -192,7 +192,7 @@ static bool curses_active(void) } /* taken from mutt */ -static char *km_keyname(int c) +static const char *km_keyname(int c) { static char buf[10]; @@ -901,6 +901,14 @@ static int signal_post_select(struct sched *s, __a_unused void *context) switch (ret) { case SIGTERM: die(EXIT_FAILURE, "only the good die young (caught SIGTERM)\n"); + case SIGWINCH: + PARA_NOTICE_LOG("got SIGWINCH\n"); + if (curses_active()) { + shutdown_curses(); + init_curses(); + redraw_bot_win(); + } + return 1; case SIGINT: return 1; case SIGUSR1: @@ -1041,6 +1049,7 @@ static void handle_command(int c) { int i; const struct lls_opt_result *lor = OPT_RESULT(KEY_MAP); + const char *keyname = km_keyname(c); /* first check user-defined key bindings */ FOR_EACH_KEY_MAP(i) { @@ -1051,7 +1060,7 @@ static void handle_command(int c) free(tmp); return; } - if (strcmp(tmp, km_keyname(c))) { + if (strcmp(tmp, keyname)) { free(tmp); continue; } @@ -1071,13 +1080,13 @@ static void handle_command(int c) } /* not found, check internal key bindings */ for (i = 0; command_list[i].handler; i++) { - if (!strcmp(km_keyname(c), command_list[i].key)) { + if (!strcmp(keyname, command_list[i].key)) { command_list[i].handler(); return; } } print_in_bar(COLOR_ERRMSG, "key '%s' is not bound, press ? for help", - km_keyname(c)); + keyname); } static int input_post_select(__a_unused struct sched *s, @@ -1106,14 +1115,8 @@ static int input_post_select(__a_unused struct sched *s, ret = wgetch(top.win); if (ret == ERR) return 0; - if (ret == KEY_RESIZE) { - if (curses_active()) { - shutdown_curses(); - init_curses(); - redraw_bot_win(); - } + if (ret == KEY_RESIZE) /* already handled in signal_post_select() */ return 0; - } if (exs == EXEC_IDLE) handle_command(ret); else if (exec_pid > 0) @@ -1416,6 +1419,7 @@ static int setup_tasks_and_schedule(void) para_install_sighandler(SIGTERM); para_install_sighandler(SIGCHLD); para_install_sighandler(SIGUSR1); + para_install_sighandler(SIGWINCH); signal_task->task = task_register(&(struct task_info) { .name = "signal", .pre_select = signal_pre_select,