@@ -3,6 +3,9 @@ | |||||
include config.mk | include config.mk | ||||
SRC = dmenu.c draw.c | |||||
OBJ = ${SRC:.c=.o} | |||||
all: options dmenu | all: options dmenu | ||||
options: | options: | ||||
@@ -11,22 +14,24 @@ options: | |||||
@echo "LDFLAGS = ${LDFLAGS}" | @echo "LDFLAGS = ${LDFLAGS}" | ||||
@echo "CC = ${CC}" | @echo "CC = ${CC}" | ||||
dmenu: dmenu.o draw.o | |||||
@echo CC -o $@ | |||||
@${CC} -o $@ dmenu.o draw.o ${LDFLAGS} | |||||
.c.o: config.mk | |||||
.c.o: | |||||
@echo CC -c $< | @echo CC -c $< | ||||
@${CC} -c $< ${CFLAGS} | @${CC} -c $< ${CFLAGS} | ||||
${OBJ}: config.mk | |||||
dmenu: ${OBJ} | |||||
@echo CC -o $@ | |||||
@${CC} -o $@ ${OBJ} ${LDFLAGS} | |||||
clean: | clean: | ||||
@echo cleaning | @echo cleaning | ||||
@rm -f dmenu dmenu.o draw.o dmenu-${VERSION}.tar.gz | |||||
@rm -f dmenu ${OBJ} dmenu-${VERSION}.tar.gz | |||||
dist: clean | dist: clean | ||||
@echo creating dist tarball | @echo creating dist tarball | ||||
@mkdir -p dmenu-${VERSION} | @mkdir -p dmenu-${VERSION} | ||||
@cp LICENSE Makefile README config.mk dmenu.1 dmenu.c draw.c draw.h dmenu_path dmenu_run dmenu-${VERSION} | |||||
@cp LICENSE Makefile README config.mk dmenu.1 draw.h dmenu_path dmenu_run ${SRC} dmenu-${VERSION} | |||||
@tar -cf dmenu-${VERSION}.tar dmenu-${VERSION} | @tar -cf dmenu-${VERSION}.tar dmenu-${VERSION} | ||||
@gzip dmenu-${VERSION}.tar | @gzip dmenu-${VERSION}.tar | ||||
@rm -rf dmenu-${VERSION} | @rm -rf dmenu-${VERSION} | ||||
@@ -1,10 +1,6 @@ | |||||
# dmenu version | # dmenu version | ||||
VERSION = 4.3 | VERSION = 4.3 | ||||
# dmenu_path cache (absolute or relative to $HOME) | |||||
CACHE = .dmenu_cache | |||||
# paths | # paths | ||||
PREFIX = /usr/local | PREFIX = /usr/local | ||||
MANPREFIX = ${PREFIX}/share/man | MANPREFIX = ${PREFIX}/share/man | ||||
@@ -21,7 +17,7 @@ INCS = -I${X11INC} | |||||
LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} | LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} | ||||
# flags | # flags | ||||
CPPFLAGS = -D_BSD_SOURCE -DVERSION=\"${VERSION}\" -DCACHE=\"${CACHE}\" ${XINERAMAFLAGS} | |||||
CPPFLAGS = -D_BSD_SOURCE -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS} | |||||
CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} | CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} | ||||
LDFLAGS = -s ${LIBS} | LDFLAGS = -s ${LIBS} | ||||
@@ -31,9 +31,9 @@ dmenu \- dynamic menu | |||||
.B dmenu | .B dmenu | ||||
is a dynamic menu for X, originally designed for | is a dynamic menu for X, originally designed for | ||||
.BR dwm (1). | .BR dwm (1). | ||||
It manages huge numbers of user-defined menu items efficiently. | |||||
It manages huge numbers of user\-defined menu items efficiently. | |||||
.P | .P | ||||
dmenu reads a list of newline-separated items from stdin and creates a menu. | |||||
dmenu reads a list of newline\-separated items from stdin and creates a menu. | |||||
When the user selects an item or enters any text and presses Return, their | When the user selects an item or enters any text and presses Return, their | ||||
choice is printed to stdout and dmenu terminates. | choice is printed to stdout and dmenu terminates. | ||||
.P | .P | ||||
@@ -25,14 +25,13 @@ drawrect(DC *dc, int x, int y, unsigned int w, unsigned int h, Bool fill, unsign | |||||
(fill ? XFillRectangles : XDrawRectangles)(dc->dpy, dc->canvas, dc->gc, &r, 1); | (fill ? XFillRectangles : XDrawRectangles)(dc->dpy, dc->canvas, dc->gc, &r, 1); | ||||
} | } | ||||
void | void | ||||
drawtext(DC *dc, const char *text, unsigned long col[ColLast]) { | drawtext(DC *dc, const char *text, unsigned long col[ColLast]) { | ||||
char buf[256]; | |||||
char buf[BUFSIZ]; | |||||
size_t mn, n = strlen(text); | size_t mn, n = strlen(text); | ||||
/* shorten text if necessary */ | /* shorten text if necessary */ | ||||
for(mn = MIN(n, sizeof buf); textnw(dc, text, mn) > dc->w - dc->font.height/2; mn--) | |||||
for(mn = MIN(n, sizeof buf); textnw(dc, text, mn) + dc->font.height/2 > dc->w; mn--) | |||||
if(mn == 0) | if(mn == 0) | ||||
return; | return; | ||||
memcpy(buf, text, mn); | memcpy(buf, text, mn); | ||||
@@ -157,12 +156,11 @@ void | |||||
resizedc(DC *dc, unsigned int w, unsigned int h) { | resizedc(DC *dc, unsigned int w, unsigned int h) { | ||||
if(dc->canvas) | if(dc->canvas) | ||||
XFreePixmap(dc->dpy, dc->canvas); | XFreePixmap(dc->dpy, dc->canvas); | ||||
dc->canvas = XCreatePixmap(dc->dpy, DefaultRootWindow(dc->dpy), w, h, | dc->canvas = XCreatePixmap(dc->dpy, DefaultRootWindow(dc->dpy), w, h, | ||||
DefaultDepth(dc->dpy, DefaultScreen(dc->dpy))); | DefaultDepth(dc->dpy, DefaultScreen(dc->dpy))); | ||||
dc->x = dc->y = 0; | |||||
dc->w = w; | dc->w = w; | ||||
dc->h = h; | dc->h = h; | ||||
dc->invert = False; | |||||
} | } | ||||
int | int | ||||