commit 81645336ed7f8a9ba984bf518f01ec18cc025aa9 from: Marcel Rodrigues date: Thu Aug 25 23:01:45 2016 UTC Refresh directory listing on SIGUSR1 signal. commit - 418661ca4e44e316ca1eddd06015405049dfb88c commit + 81645336ed7f8a9ba984bf518f01ec18cc025aa9 blob - ad2afe4369b00759cad30ca159bb2c8c4c0a22bf blob + d10639063ad53773c3eabab7938a39c6d9e66eb4 --- rover.c +++ rover.c @@ -97,6 +97,7 @@ static struct Rover { Marks marks; Edit edit; int edit_scroll; + volatile sig_atomic_t pending_usr1; volatile sig_atomic_t pending_winch; Prog prog; Tab tabs[10]; @@ -226,6 +227,12 @@ free_marks(Marks *marks) } static void +handle_usr1(int sig) +{ + rover.pending_usr1 = 1; +} + +static void handle_winch(int sig) { rover.pending_winch = 1; @@ -237,6 +244,8 @@ enable_handlers() struct sigaction sa; memset(&sa, 0, sizeof (struct sigaction)); + sa.sa_handler = handle_usr1; + sigaction(SIGUSR1, &sa, NULL); sa.sa_handler = handle_winch; sigaction(SIGWINCH, &sa, NULL); } @@ -248,15 +257,22 @@ disable_handlers() memset(&sa, 0, sizeof (struct sigaction)); sa.sa_handler = SIG_DFL; + sigaction(SIGUSR1, &sa, NULL); sigaction(SIGWINCH, &sa, NULL); } +static void reload(); static void update_view(); /* Handle any signals received since last call. */ static void sync_signals() { + if (rover.pending_usr1) { + /* SIGUSR1 received: refresh directory listing. */ + reload(); + rover.pending_usr1 = 0; + } if (rover.pending_winch) { /* SIGWINCH received: resize application accordingly. */ delwin(rover.window);