added option to output only once and exit afterwards
authorAaron Marcher <info@nulltime.net>
Thu, 11 May 2017 17:06:45 +0000 (19:06 +0200)
committerAaron Marcher <info@nulltime.net>
Thu, 11 May 2017 17:06:45 +0000 (19:06 +0200)
slstatus.1
slstatus.c

index afc3505ce68cb0d92d6f74d311ac88aa62fa6409..de5d0e8e7121e870e459e6b83e804c2cfea0b8f4 100644 (file)
@@ -15,7 +15,10 @@ run slstatus as daemon in background
 display help
 .TP
 .B \-o
-output to console instead of WM_NAME
+output continuously to console instead of WM_NAME
+.TP
+.B \-n
+output to console once and exit
 .TP
 .B \-v
 display version and copyright details
index 9e6aca0117bdd744fc3c04781153105b7ced42ff..82414518563c47335971c99abab58fab147fbc9e 100644 (file)
@@ -71,7 +71,7 @@ static void usage(const int eval);
 char *argv0;
 static unsigned short int delay = 0;
 static unsigned short int done;
-static unsigned short int dflag, oflag;
+static unsigned short int dflag, oflag, nflag;
 static Display *dpy;
 
 #include "config.h"
@@ -775,7 +775,7 @@ sighandler(const int signo)
 static void
 usage(const int eval)
 {
-       fprintf(stderr, "usage: %s [-d] [-o] [-v] [-h]\n", argv0);
+       fprintf(stderr, "usage: %s [-d] [-o] [-n] [-v] [-h]\n", argv0);
        exit(eval);
 }
 
@@ -795,6 +795,9 @@ main(int argc, char *argv[])
                case 'o':
                        oflag = 1;
                        break;
+               case 'n':
+                       nflag = 1;
+                       break;
                case 'v':
                        printf("slstatus (C) 2016-2017 slstatus engineers\n");
                        return 0;
@@ -804,7 +807,7 @@ main(int argc, char *argv[])
                        usage(1);
        } ARGEND
 
-       if (dflag && oflag) {
+       if ((dflag && oflag) || (dflag && nflag) || (oflag && nflag)) {
                usage(1);
        }
        if (dflag && daemon(1, 1) < 0) {
@@ -842,11 +845,14 @@ main(int argc, char *argv[])
                        free(element);
                }
 
-               if (!oflag) {
+               if (oflag) {
+                       printf("%s\n", status_string);
+               } else if (nflag) {
+                       printf("%s\n", status_string);
+                       done = 1;
+               } else {
                        XStoreName(dpy, DefaultRootWindow(dpy), status_string);
                        XSync(dpy, False);
-               } else {
-                       printf("%s\n", status_string);
                }
 
                if ((UPDATE_INTERVAL - delay) <= 0) {