simpler + faster - 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
       ---
 (DIR) commit c3c53904786edb0c646dafaf15e2382eaf8999d2
 (DIR) parent c720ff0f08d0844f85fd61636c0b441d9b9da493
 (HTM) Author: Connor Lane Smith <cls@lubutu.com>
       Date:   Mon,  9 Aug 2010 11:58:17 +0100
       
       simpler + faster
       Diffstat:
         M sselp.c                             |      77 +++++++++++--------------------
       
       1 file changed, 27 insertions(+), 50 deletions(-)
       ---
 (DIR) diff --git a/sselp.c b/sselp.c
       @@ -1,67 +1,44 @@
        /* See LICENSE file for license details. */
       -#include <stdlib.h>
        #include <stdio.h>
        #include <string.h>
        #include <X11/Xlib.h>
        #include <X11/Xatom.h>
       -#include <X11/Xutil.h>
        
       -static unsigned char *
       -getsel(unsigned long offset, unsigned long *len, unsigned long *remain) {
       +int
       +main(int argc, char *argv[]) {
       +        Atom utf8, type;
                Display *dpy;
       -        Atom utf8_string;
       -        Atom xa_clip_string;
       -        Window w;
       +        Window win;
                XEvent ev;
       -        Atom typeret;
       -        int format;
       +        int fmt;
       +        long off = 0;
                unsigned char *data;
       -        unsigned char *result = NULL;
       +        unsigned long len, more;
       +
       +        if(argc > 1 && !strcmp(argv[1], "-v")) {
       +                fputs("sselp-"VERSION", © 2006-2010 Anselm R Garbe\n", stdout);
       +                return 0;
       +        }
       +        if(!(dpy = XOpenDisplay(NULL)))
       +                return 1;
       +
       +        utf8 = XInternAtom(dpy, "UTF8_STRING", False);
       +        win = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0, 1, 1, 0,
       +                                  CopyFromParent, CopyFromParent);
       +        XConvertSelection(dpy, XA_PRIMARY, utf8, None, win, CurrentTime);
        
       -        dpy = XOpenDisplay(NULL);
       -        if(!dpy)
       -                return NULL;
       -        utf8_string = XInternAtom(dpy, "UTF8_STRING", False);
       -        xa_clip_string = XInternAtom(dpy, "_SSELP_STRING", False);
       -        w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 10, 10, 200, 200,
       -                        1, CopyFromParent, CopyFromParent);
       -        XConvertSelection(dpy, XA_PRIMARY, utf8_string, xa_clip_string,
       -                        w, CurrentTime);
       -        XFlush(dpy);
                XNextEvent(dpy, &ev);
                if(ev.type == SelectionNotify && ev.xselection.property != None) {
       -                XGetWindowProperty(dpy, w, ev.xselection.property, offset, 4096L, False,
       -                                AnyPropertyType, &typeret, &format, len, remain, &data);
       -                if(*len) {
       -                        result = malloc(sizeof(unsigned char) * *len);
       -                        memcpy(result, data, *len);
       +                do {
       +                        XGetWindowProperty(dpy, win, utf8, off, BUFSIZ, False,
       +                                           utf8, &type, &fmt, &len, &more, &data);
       +                        fwrite(data, 1, len, stdout);
       +                        XFree(data);
       +                        off += len;
                        }
       -                XDeleteProperty(dpy, w, ev.xselection.property);
       +                while(more > 0);
       +                putchar('\n');
                }
       -        XDestroyWindow(dpy, w);
                XCloseDisplay(dpy);
       -        return result;
       -}
       -
       -int
       -main(int argc, char **argv) {
       -        unsigned char *data;
       -        unsigned long i, offset, len, remain;
       -
       -        if((argc > 1) && !strncmp(argv[1], "-v", 3)) {
       -                fputs("sselp-"VERSION", © 2006-2008 Anselm R Garbe\n", stdout);
       -                exit(EXIT_SUCCESS);
       -        }
       -        len = offset = remain = 0;
       -        do {
       -                data = getsel(offset, &len, &remain);
       -                for(i = 0; i < len; i++)
       -                        putchar(data[i]);
       -                offset += len;
       -                free(data);
       -        }
       -        while(remain);
       -        if(offset)
       -                putchar('\n');
                return 0;
        }