~brown121407/dwm

26e134b8a7dae21a699822009674b3131de6e250 — Anselm R. Garbe 15 years ago 0053620
added gridsel to gridwm
7 files changed, 99 insertions(+), 13 deletions(-)

M Makefile
M config.h
M event.c
A gridsel.c
M menu.c
M util.c
M util.h
M Makefile => Makefile +8 -2
@@ 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:


@@ 34,6 36,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.h => config.h +3 -0
@@ 9,7 9,10 @@
#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.c => event.c +2 -4
@@ 81,13 81,11 @@ configurerequest(XEvent *e)
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 => gridsel.c +47 -0
@@ 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 menu.c => menu.c +0 -7
@@ 356,13 356,6 @@ main(int argc, char *argv[])
	char *maxname;
	XEvent ev;

	char buf[256];

	pipe_spawn(buf, sizeof(buf), NULL, STATUSCMD);
	fputs(buf, stderr);

	return 0;

	/* command line args */
	for(i = 1; i < argc; i++) {
		if (argv[i][0] == '-')

M util.c => util.c +38 -0
@@ 10,6 10,7 @@
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <X11/Xatom.h>

#include "util.h"



@@ 147,3 148,40 @@ pipe_spawn(char *buf, unsigned int len, Display *dpy, const char *cmd)
	}
	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.h => util.h +1 -0
@@ 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);