sprop.c - sprop - simple xprop replacement
 (HTM) git clone git://git.suckless.org/sprop
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       sprop.c (1360B)
       ---
            1 #include <stdio.h>
            2 #include <stdlib.h>
            3 #include <string.h>
            4 #include <X11/Xlib.h>
            5 #include <X11/Xatom.h>
            6 
            7 static char *getprop(Atom atom);
            8 static void setprop(Atom atom, char *value);
            9 
           10 static Atom utf8;
           11 static Display *dpy;
           12 static Window win;
           13 
           14 int
           15 main(int argc, char *argv[])
           16 {
           17         char *value = NULL;
           18         Atom atom;
           19 
           20         if(!(dpy = XOpenDisplay(NULL))) {
           21                 fputs("sprop: cannot open display\n", stderr);
           22                 return 1;
           23         }
           24         switch(argc) {
           25         case 4:
           26                 value = argv[3];
           27         case 3:
           28                 atom = XInternAtom(dpy, argv[2], True);
           29                 utf8 = XInternAtom(dpy, "UTF8_STRING", True);
           30                 win = atol(argv[1]);
           31                 break;
           32         case 2:
           33                 if(!strcmp(argv[1], "-v")) {
           34                         fputs("sprop-"VERSION", © 2010 Connor Lane Smith\n", stdout);
           35                         return 0;
           36                 }
           37         default:
           38                 fprintf(stderr, "usage: sprop <xid> <atom> [<value>] [-v]\n");
           39                 return 1;
           40         }
           41         if(value)
           42                 setprop(atom, value);
           43         else {
           44                 if(!(value = getprop(atom))) {
           45                         fputs("sprop: cannot get atom\n", stderr);
           46                         return 1;
           47                 }
           48                 printf("%s\n", value);
           49                 XFree(value);
           50         }
           51         XCloseDisplay(dpy);
           52         return 0;
           53 }
           54 
           55 char *
           56 getprop(Atom atom)
           57 {
           58         int di;
           59         unsigned long dl;
           60         unsigned char *p = NULL;
           61         Atom da;
           62 
           63         XGetWindowProperty(dpy, win, atom, 0, BUFSIZ, False, utf8, &da, &di, &dl, &dl, &p);
           64         return (char *)p;
           65 }
           66 
           67 void
           68 setprop(Atom atom, char *value)
           69 {
           70         XChangeProperty(dpy, win, atom, utf8, 8, PropModeReplace,
           71                         (unsigned char *)value, strlen(value));
           72 }