all repos — dwm @ 26e134b8a7dae21a699822009674b3131de6e250

my dwm build

added gridsel to gridwm
Anselm R. Garbe garbeam@wmii.de
Tue, 11 Jul 2006 13:21:57 +0200
commit

26e134b8a7dae21a699822009674b3131de6e250

parent

005362043d8b0bbf856f301c231d4f10c519b8c4

7 files changed, 99 insertions(+), 13 deletions(-)

jump to
M MakefileMakefile

@@ -7,10 +7,12 @@ WMSRC = bar.c client.c cmd.c draw.c event.c key.c util.c wm.c

WMOBJ = ${WMSRC:.c=.o} MENSRC = menu.c draw.c util.c MENOBJ = ${MENSRC:.c=.o} +SELSRC = gridsel.c util.c +SELOBJ = ${SELSRC:.c=.o} MAN1 = gridwm.1 gridmenu.1 -BIN = gridwm gridmenu +BIN = gridwm gridmenu gridsel -all: config gridwm gridmenu +all: config gridwm gridmenu gridsel @echo finished config:

@@ -33,6 +35,10 @@

gridwm: ${WMOBJ} @echo LD $@ @${CC} -o $@ ${WMOBJ} ${LDFLAGS} + +gridsel: ${SELOBJ} + @echo LD $@ + @${CC} -o $@ ${SELOBJ} ${LDFLAGS} clean: rm -f gridwm gridmenu *.o core
M config.hconfig.h

@@ -9,7 +9,10 @@ #define FGCOLOR "#ffaa00"

#define BORDERCOLOR "#000000" #define STATUSCMD "echo -n `date` `uptime | sed 's/.*://; s/,//g'`" \ " `acpi | awk '{print $4}' | sed 's/,//'`" +#define PLCMD "`ls -lL /bin /sbin /usr/bin /usr/local/bin 2>/dev/null | awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | gridmenu`" + #define KEYS \ { Mod1Mask, XK_Return, run, "xterm -u8 -bg black -fg white -fn '-*-terminus-medium-*-*-*-14-*-*-*-*-*-iso10646-*'" }, \ + { Mod1Mask, XK_p, run, PLCMD }, \ { Mod1Mask | ShiftMask, XK_q, quit, NULL},
M event.cevent.c

@@ -81,13 +81,11 @@

static void destroynotify(XEvent *e) { -#if 0 Client *c; XDestroyWindowEvent *ev = &e->xdestroywindow; - if((c = client_of_win(ev->window))) - destroy_client(c); -#endif + if((c = getclient(ev->window))) + unmanage(c); } static void
A gridsel.c

@@ -0,0 +1,47 @@

+/* + * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> + * See LICENSE file for license details. + */ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include <util.h> + +static char version[] = "gridsel - " VERSION ", (C)opyright MMVI Anselm R. Garbe\n"; + +static void +usage() +{ + fprintf(stderr, "%s\n", "usage: gridsel [-v]\n"); + exit(1); +} + +int +main(int argc, char **argv) +{ + unsigned char *data; + unsigned long i, offset, len, remain; + + /* command line args */ + if(argc > 1) { + if(!strncmp(argv[1], "-v", 3)) { + fprintf(stdout, "%s", version); + exit(0); + } else + usage(); + } + len = offset = remain = 0; + do { + data = getselection(offset, &len, &remain); + for(i = 0; i < len; i++) + putchar(data[i]); + offset += len; + free(data); + } + while(remain); + if(offset) + putchar('\n'); + return 0; +}
M util.cutil.c

@@ -10,6 +10,7 @@ #include <string.h>

#include <sys/types.h> #include <sys/wait.h> #include <unistd.h> +#include <X11/Xatom.h> #include "util.h"

@@ -147,3 +148,40 @@ buf[n - 1] = 0;

} wait(0); } + + +unsigned char * +getselection(unsigned long offset, unsigned long *len, unsigned long *remain) +{ + Display *dpy; + Atom xa_clip_string; + Window w; + XEvent ev; + Atom typeret; + int format; + unsigned char *data; + unsigned char *result = NULL; + + dpy = XOpenDisplay(0); + if(!dpy) + return NULL; + xa_clip_string = XInternAtom(dpy, "_SEL_STRING", False); + w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 10, 10, 200, 200, + 1, CopyFromParent, CopyFromParent); + XConvertSelection(dpy, XA_PRIMARY, XA_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 = emalloc(sizeof(unsigned char) * *len); + memcpy(result, data, *len); + } + XDeleteProperty(dpy, w, ev.xselection.property); + } + XDestroyWindow(dpy, w); + XCloseDisplay(dpy); + return result; +}
M util.hutil.h

@@ -17,3 +17,4 @@ extern void failed_assert(char *a, char *file, int line);

void pipe_spawn(char *buf, unsigned int len, Display *dpy, const char *cmd); extern void spawn(Display *dpy, const char *cmd); extern void swap(void **p1, void **p2); +unsigned char *getselection(unsigned long offset, unsigned long *len, unsigned long *remain);