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 }