sigwinch - iomenu - interactive terminal-based selection menu
 (HTM) git clone git://bitreich.org/iomenu git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/iomenu
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 4a488ca1bbb3bf794bccdd502c5c64173f4b5bdb
 (DIR) parent 4ce5703054613b342e3bc0fb1b1d35f510984fbd
 (HTM) Author: Josuah Demangeon <josuah.demangeon@gandi.net>
       Date:   Thu, 18 May 2017 11:53:32 +0200
       
       sigwinch
       
       Diffstat:
         M iomenu.c                            |      22 +++++++++++++++++-----
       
       1 file changed, 17 insertions(+), 5 deletions(-)
       ---
 (DIR) diff --git a/iomenu.c b/iomenu.c
       @@ -1,5 +1,6 @@
        #include <fcntl.h>
        #include <locale.h>
       +#include <signal.h>
        #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
       @@ -58,10 +59,6 @@ set_terminal(void)
        {
                struct termios new;
        
       -        /* get window size */
       -        if (ioctl(tty_fd, TIOCGWINSZ, &ws) < 0)
       -                die("ioctl");
       -
                /* save cursor postition */
                fputs("\033[s", stderr);
        
       @@ -434,7 +431,6 @@ input_get(void)
        
                input[0] = '\0';
        
       -        print_screen();
                while ((exit_code = input_key()) == CONTINUE)
                        print_screen();
        
       @@ -445,6 +441,21 @@ input_get(void)
        
        
        static void
       +sigwinch()
       +{
       +        extern struct winsize ws;
       +
       +        /* get window size */
       +        if (ioctl(tty_fd, TIOCGWINSZ, &ws) < 0)
       +                die("ioctl");
       +
       +        print_screen();
       +
       +        signal(SIGWINCH, sigwinch);
       +}
       +
       +
       +static void
        usage(void)
        {
                fprintf(stderr, "%s [-b] [-t] [-s] [-l lines] [-p prompt]\n", argv0);
       @@ -505,6 +516,7 @@ main(int argc, char *argv[])
                tty_fd =  open("/dev/tty", O_RDWR);
        
                set_terminal();
       +        sigwinch();
                exit_code = input_get();  /* main loop */
                reset_terminal();
                close(tty_fd);