login

<     >

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[])
 {