]> Sergey Matveev's repositories - nnn.git/commitdiff
Run screensaver after a period of idleness
authorlostd <lostd@2f30.org>
Mon, 2 Nov 2015 01:21:41 +0000 (03:21 +0200)
committerlostd <lostd@2f30.org>
Mon, 2 Nov 2015 01:21:41 +0000 (03:21 +0200)
config.def.h
noice.c

index a355333108195390263411fc771aec6287560516..80cb48c37abb5b69819967a027ae8605250f74ef 100644 (file)
@@ -3,6 +3,8 @@
 #define EMPTY "   "
 
 int mtimeorder = 0; /* Set to 1 to sort by time in the default case */
+int idletimeout = 0; /* Screensaver timeout in seconds, 0 to disable */
+char *idlecmd = "rain"; /* The screensaver program */
 
 struct assoc assocs[] = {
        { "\\.(avi|mp4|mkv|mp3|ogg|flac|mov)$", "mplayer" },
diff --git a/noice.c b/noice.c
index ba529d6c325509d04b8fe4d8cbdeaeb9a9feba37..18577d3888c96e29054fb37b93cb3d824cb10c98 100644 (file)
--- a/noice.c
+++ b/noice.c
@@ -82,6 +82,7 @@ struct entry *dents;
 int n, cur;
 char *path, *oldpath;
 char *fltr;
+int idle;
 
 /*
  * Layout:
@@ -259,6 +260,7 @@ initcurses(void)
        intrflush(stdscr, FALSE);
        keypad(stdscr, TRUE);
        curs_set(FALSE); /* Hide cursor */
+       timeout(1000); /* One second */
 }
 
 void
@@ -314,6 +316,10 @@ nextsel(char **run)
        int c, i;
 
        c = getch();
+       if (c == -1)
+               idle++;
+       else
+               idle = 0;
 
        for (i = 0; i < LEN(bindings); i++)
                if (c == bindings[i].sym) {
@@ -879,6 +885,13 @@ moretyping:
                        initcurses();
                        break;
                }
+               /* Screensaver */
+               if (idletimeout != 0 && idle == idletimeout) {
+                       idle = 0;
+                       exitcurses();
+                       spawn(idlecmd, NULL, NULL);
+                       initcurses();
+               }
        }
 }