#include #include #include #include static char *getatom(Atom atom); static void setatom(Atom atom, char *value); static Display *dpy; static Window win; int main(int argc, char *argv[]) { Atom atom; char *value = NULL; dpy = XOpenDisplay(NULL); switch(argc) { case 4: value = argv[3]; case 3: if((atom = XInternAtom(dpy, argv[2], True)) == None) { fprintf(stderr, "sprop: no such atom\n"); return 1; } win = atoi(argv[1]); break; default: fprintf(stderr, "usage: sprop []\n"); return 1; } if(value) setatom(atom, value); else { value = getatom(atom); printf("%s\n", value); XFree(value); } XCloseDisplay(dpy); return 0; } char * getatom(Atom atom) { Atom adummy; int idummy; unsigned long ldummy; unsigned char *p = NULL; XGetWindowProperty(dpy, win, atom, 0, BUFSIZ, False, XA_STRING, &adummy, &idummy, &ldummy, &ldummy, &p); return p; } void setatom(Atom atom, char *value) { XChangeProperty(dpy, win, atom, XA_STRING, 8, PropModeReplace, (unsigned char *)value, strlen(value) + 1); }