From 870d68d44e33f9fb7a5402becbc0b5c363066bcc Mon Sep 17 00:00:00 2001
From: Aaron Marcher <info@nulltime.net>
Date: Thu, 11 May 2017 19:06:45 +0200
Subject: [PATCH] added option to output only once and exit afterwards

---
 slstatus.1 |  5 ++++-
 slstatus.c | 18 ++++++++++++------
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/slstatus.1 b/slstatus.1
index afc3505..de5d0e8 100644
--- a/slstatus.1
+++ b/slstatus.1
@@ -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
diff --git a/slstatus.c b/slstatus.c
index 9e6aca0..8241451 100644
--- a/slstatus.c
+++ b/slstatus.c
@@ -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) {