Commit Diff


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);