sselp.c - sselp - simple X selection printer to stdout
(HTM) git clone git://git.suckless.org/sselp
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
sselp.c (1141B)
---
1 /* See LICENSE file for license details. */
2 #include <stdio.h>
3 #include <string.h>
4 #include <X11/Xlib.h>
5 #include <X11/Xatom.h>
6
7 int
8 main(int argc, char *argv[]) {
9 Atom clip, utf8, type;
10 Display *dpy;
11 Window win;
12 XEvent ev;
13 int fmt;
14 long off = 0;
15 unsigned char *data;
16 unsigned long len, more;
17
18 if(argc > 1 && !strcmp(argv[1], "-v")) {
19 fputs("sselp-"VERSION", © 2006-2010 Anselm R Garbe\n", stdout);
20 return 0;
21 }
22 if(!(dpy = XOpenDisplay(NULL)))
23 return 1;
24
25 utf8 = XInternAtom(dpy, "UTF8_STRING", False);
26 clip = XInternAtom(dpy, "_SSELP_STRING", False);
27 win = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0, 1, 1, 0,
28 CopyFromParent, CopyFromParent);
29 XConvertSelection(dpy, XA_PRIMARY, utf8, clip, win, CurrentTime);
30
31 XNextEvent(dpy, &ev);
32 if(ev.type == SelectionNotify && ev.xselection.property != None) {
33 do {
34 XGetWindowProperty(dpy, win, ev.xselection.property, off, BUFSIZ,
35 False, utf8, &type, &fmt, &len, &more, &data);
36 fwrite(data, 1, len, stdout);
37 XFree(data);
38 off += len/4;
39 }
40 while(more > 0);
41 putchar('\n');
42 }
43 XCloseDisplay(dpy);
44 return 0;
45 }