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 }