interactive: Honor SIGWINCH.
[paraslash.git] / interactive.c
index dda5f84e5184b398a10652bd45ddda941e3a703e..f75e4be531d94521bf87f8baf19b5f4dfb5b6739 100644 (file)
@@ -27,6 +27,7 @@
 struct i9e_private {
        struct i9e_client_info *ici;
        FILE *stderr_stream;
+       int num_columns;
        char empty_line[1000];
        struct task task;
        struct btr_node *stdout_btrn;
@@ -339,14 +340,15 @@ static void update_winsize(void)
 {
        struct winsize w;
        int ret = ioctl(i9ep->ici->fds[2], TIOCGWINSZ, (char *)&w);
-       int num_columns = 80;
 
        if (ret >= 0) {
                assert(w.ws_col < sizeof(i9ep->empty_line));
-               num_columns = w.ws_col;
-       }
-       memset(i9ep->empty_line, ' ', num_columns);
-       i9ep->empty_line[num_columns] = '\0';
+               i9ep->num_columns = w.ws_col;
+       } else
+               i9ep->num_columns = 80;
+
+       memset(i9ep->empty_line, ' ', i9ep->num_columns);
+       i9ep->empty_line[i9ep->num_columns] = '\0';
 }
 
 /**
@@ -431,6 +433,8 @@ __printf_2_3 void i9e_log(int ll, const char* fmt,...)
  */
 void i9e_signal_dispatch(int sig_num)
 {
+       if (sig_num == SIGWINCH)
+               return update_winsize();
        if (sig_num == SIGINT) {
                fprintf(i9ep->stderr_stream, "\n");
                rl_replace_line ("", false /* clear_undo */);