2014-11-11 14:27:33 (UTC-02:00)
Marcel Rodrigues <marcelgmr@gmail.com>
Handle SIGWINCH.
diff --git a/rover.c b/rover.c index 143533d..65fbd77 100644 --- a/rover.c +++ b/rover.c @@ -127,9 +127,13 @@ clean_term() endwin(); } +void handle_winch(int sig); + static void init_term() { + struct sigaction sa; + setlocale(LC_ALL, ""); initscr(); cbreak(); /* Get one character at a time. */ @@ -138,6 +142,9 @@ init_term() intrflush(stdscr, FALSE); keypad(stdscr, TRUE); curs_set(FALSE); /* Hide blinking cursor. */ + memset(&sa, 0, sizeof(struct sigaction)); + sa.sa_handler = handle_winch; + sigaction(SIGWINCH, &sa, NULL); if (has_colors()) { start_color(); init_pair(RED, COLOR_RED, COLOR_BLACK); @@ -278,6 +285,18 @@ igetstr(char *buffer, int maxlen) return 1; } +void +handle_winch(int sig) +{ + (void) sig; + delwin(rover.window); + endwin(); + refresh(); + clear(); + rover.window = subwin(stdscr, LINES - 2, COLS, 1, 0); + cd(0); +} + int main(int argc, char *argv[]) {