URI: 
       xssstate.c - xssstate - a simple utility to get the X screensaver state
  HTML git clone git://git.suckless.org/xssstate
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       xssstate.c (1786B)
       ---
            1 /*
            2  * See LICENSE file for copyright and license details.
            3  */
            4 
            5 #include <unistd.h>
            6 #include <stdlib.h>
            7 #include <stdio.h>
            8 #include <stdarg.h>
            9 #include <stdbool.h>
           10 #include <libgen.h>
           11 #include <X11/extensions/scrnsaver.h>
           12 
           13 #include "arg.h"
           14 
           15 char *argv0;
           16 
           17 void
           18 die(const char *errstr, ...) {
           19         va_list ap;
           20 
           21         va_start(ap, errstr);
           22         vfprintf(stderr, errstr, ap);
           23         va_end(ap);
           24         exit(EXIT_FAILURE);
           25 }
           26 
           27 void
           28 usage(void)
           29 {
           30         die("usage: %s [-istv]\n", basename(argv0));
           31 }
           32 
           33 int
           34 main(int argc, char *argv[]) {
           35         XScreenSaverInfo *info;
           36         Display *dpy;
           37         int base, errbase;
           38         Bool showstate, showtill, showidle;
           39 
           40         showstate = false;
           41         showtill = false;
           42         showidle = false;
           43 
           44         ARGBEGIN {
           45         case 'i':
           46                 showidle = true;
           47                 break;
           48         case 's':
           49                 showstate = true;
           50                 break;
           51         case 't':
           52                 showtill = true;
           53                 break;
           54         case 'v':
           55                 die("xssstate-"VERSION", © 2008-2016 xssstate engineers"
           56                                 ", see LICENSE for details.\n");
           57         default:
           58                 usage();
           59         } ARGEND;
           60 
           61         if (!showstate && !showtill && !showidle)
           62                 usage();
           63 
           64         if (!(dpy = XOpenDisplay(0)))
           65                 die("Cannot open display.\n");
           66 
           67         if (!XScreenSaverQueryExtension(dpy, &base, &errbase))
           68                 die("Screensaver extension not activated.\n");
           69 
           70         info = XScreenSaverAllocInfo();
           71         XScreenSaverQueryInfo(dpy, DefaultRootWindow(dpy), info);
           72 
           73         if (showstate) {
           74                 switch(info->state) {
           75                 case ScreenSaverOn:
           76                         printf("on\n");
           77                         break;
           78                 case ScreenSaverOff:
           79                         printf("off\n");
           80                         break;
           81                 case ScreenSaverDisabled:
           82                         printf("disabled\n");
           83                         break;
           84                 }
           85         } else if (showtill) {
           86                 switch(info->state) {
           87                 case ScreenSaverOn:
           88                         printf("0\n");
           89                         break;
           90                 case ScreenSaverOff:
           91                         printf("%lu\n", info->til_or_since);
           92                         break;
           93                 case ScreenSaverDisabled:
           94                         printf("-1\n");
           95                         break;
           96                 }
           97         } else if (showidle) {
           98                 printf("%lu\n", info->idle);
           99         }
          100 
          101 
          102         XCloseDisplay(dpy);
          103 
          104         return 0;
          105 }
          106