Adding the main C file too. - xssstate - a simple utility to get the X screensa… | |
git clone git://git.suckless.org/xssstate | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit ea369273fd93c6f5705f4c69be14cc6c88d6184c | |
parent c30b12c8e9d20225f69014d3fe60c0c0c4476773 | |
Author: Christoph Lohmann <[email protected]> | |
Date: Sun, 9 Dec 2012 07:10:32 +0100 | |
Adding the main C file too. | |
Diffstat: | |
A xssstate.c | 106 ++++++++++++++++++++++++++++++ | |
1 file changed, 106 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/xssstate.c b/xssstate.c | |
@@ -0,0 +1,106 @@ | |
+/* | |
+ * See LICENSE file for copyright and license details. | |
+ */ | |
+ | |
+#include <unistd.h> | |
+#include <stdlib.h> | |
+#include <stdio.h> | |
+#include <stdarg.h> | |
+#include <stdbool.h> | |
+#include <libgen.h> | |
+#include <X11/extensions/scrnsaver.h> | |
+ | |
+#include "arg.h" | |
+ | |
+char *argv0; | |
+ | |
+void | |
+die(const char *errstr, ...) { | |
+ va_list ap; | |
+ | |
+ va_start(ap, errstr); | |
+ vfprintf(stderr, errstr, ap); | |
+ va_end(ap); | |
+ exit(EXIT_FAILURE); | |
+} | |
+ | |
+void | |
+usage(void) | |
+{ | |
+ die("usage: %s [-istv]\n", basename(argv0)); | |
+} | |
+ | |
+int | |
+main(int argc, char *argv[]) { | |
+ XScreenSaverInfo *info; | |
+ Display *dpy; | |
+ int base, errbase; | |
+ Bool showstate, showtill, showidle; | |
+ | |
+ showstate = false; | |
+ showtill = false; | |
+ showidle = false; | |
+ | |
+ ARGBEGIN { | |
+ case 'i': | |
+ showidle = true; | |
+ break; | |
+ case 's': | |
+ showstate = true; | |
+ break; | |
+ case 't': | |
+ showtill = true; | |
+ break; | |
+ case 'v': | |
+ die("xssstate-"VERSION", © 2008-2012 xssstate engineers" | |
+ ", see LICENSE for details.\n"); | |
+ default: | |
+ usage(); | |
+ } ARGEND; | |
+ | |
+ if (!showstate && !showtill && !showidle) | |
+ usage(); | |
+ | |
+ if (!(dpy = XOpenDisplay(0))) | |
+ die("Cannot open display.\n"); | |
+ | |
+ if (!XScreenSaverQueryExtension(dpy, &base, &errbase)) | |
+ die("Screensaver extension not activated.\n"); | |
+ | |
+ info = XScreenSaverAllocInfo(); | |
+ XScreenSaverQueryInfo(dpy, DefaultRootWindow(dpy), info); | |
+ | |
+ if (showstate) { | |
+ switch(info->state) { | |
+ case ScreenSaverOn: | |
+ printf("on\n"); | |
+ break; | |
+ case ScreenSaverOff: | |
+ printf("off\n"); | |
+ break; | |
+ case ScreenSaverDisabled: | |
+ printf("disabled\n"); | |
+ break; | |
+ } | |
+ } else if (showtill) { | |
+ switch(info->state) { | |
+ case ScreenSaverOn: | |
+ printf("0\n"); | |
+ break; | |
+ case ScreenSaverOff: | |
+ printf("%ld\n", info->til_or_since); | |
+ break; | |
+ case ScreenSaverDisabled: | |
+ printf("-1\n"); | |
+ break; | |
+ } | |
+ } else if (showidle) { | |
+ printf("%ld\n", info->idle); | |
+ } | |
+ | |
+ | |
+ XCloseDisplay(dpy); | |
+ | |
+ return 0; | |
+} | |
+ |