22 Commits
0.3 ... 0.5

Author SHA1 Message Date
Anselm R. Garbe
865c938856 prepared dmenu-0.5 2006-08-24 10:22:30 +02:00
Anselm R. Garbe
30d72e5f87 removed unnecessary Xlib call 2006-08-24 09:27:01 +02:00
Anselm R. Garbe
0ffd139f2c sanitizing my colorscheme 2006-08-23 19:05:20 +02:00
Anselm R. Garbe
86512ce930 back to terminus font 2006-08-23 18:55:48 +02:00
Anselm R. Garbe
d3206194c1 font fix 2006-08-22 10:01:45 +02:00
Anselm R. Garbe
8148b515a1 fixed 2006-08-22 09:49:56 +02:00
arg@localhost.10kloc.org
35210e3998 applied OpenBSD changes.. 2006-08-21 17:45:46 +02:00
Anselm R.Garbe
df85dd743c renamed bad_malloc into badmalloc as well 2006-08-21 07:34:16 +02:00
Anselm R.Garbe
d9f6fa426b small changes in dmenu.1 2006-08-21 07:31:33 +02:00
Anselm R.Garbe
bbb2cc2a72 fixed a typo in config.mk, fixed cleanup code in dmenu (now frees all allocated stuff) 2006-08-16 19:25:04 +02:00
Anselm R.Garbe
02ddc93c94 applied sanders patch 2006-08-16 12:37:01 +02:00
Anselm R.Garbe
0faf441367 applied sanders Makefile patch 2006-08-16 08:57:10 +02:00
Anselm R.Garbe
be6b534520 fixed the same issue in dmenu 2006-08-15 16:56:55 +02:00
Anselm R.Garbe
db76b0f9a5 Added tag 0.4 for changeset 7acf0dde1120542917bae12e0e42293f9d2cc899 2006-08-15 10:39:26 +02:00
Anselm R.Garbe
26fc52fcf6 removed finished message 2006-08-14 16:11:38 +02:00
Anselm R.Garbe
6a26e97f74 fixed string cutting 2006-08-14 10:56:57 +02:00
Anselm R.Garbe
0e21ef5f37 fixed string cutting 2006-08-14 08:52:28 +02:00
Anselm R.Garbe
2f3068fb77 added comment 2006-08-14 08:44:54 +02:00
Anselm R.Garbe
b7f8911455 applied Sanders LD patch 2006-08-14 08:42:23 +02:00
Anselm R.Garbe
35a06ccd2e applied my new color scheme 2006-08-11 18:12:07 +02:00
Anselm R.Garbe
67649463c8 simplified drawborder 2006-08-11 11:52:34 +02:00
Anselm R.Garbe
d1415ea497 Added tag 0.3 for changeset d352e9dc112ee96aa5cad961a0ed880ae9ce7276 2006-08-10 15:19:03 +02:00
9 changed files with 57 additions and 42 deletions

View File

@@ -1,2 +1,4 @@
fcc8a282cb52c6a9343b461026b386825590cd31 0.1 fcc8a282cb52c6a9343b461026b386825590cd31 0.1
656be0f47df545dfdd2e1e0663663b8b1b26f031 0.2 656be0f47df545dfdd2e1e0663663b8b1b26f031 0.2
d352e9dc112ee96aa5cad961a0ed880ae9ce7276 0.3
7acf0dde1120542917bae12e0e42293f9d2cc899 0.4

View File

@@ -7,19 +7,19 @@ SRC = draw.c main.c util.c
OBJ = ${SRC:.c=.o} OBJ = ${SRC:.c=.o}
all: options dmenu all: options dmenu
@echo finished
options: options:
@echo dmenu build options: @echo dmenu build options:
@echo "CFLAGS = ${CFLAGS}" @echo "CFLAGS = ${CFLAGS}"
@echo "LDFLAGS = ${LDFLAGS}" @echo "LDFLAGS = ${LDFLAGS}"
@echo "CC = ${CC}" @echo "CC = ${CC}"
@echo "LD = ${LD}"
.c.o: .c.o:
@echo CC $< @echo CC $<
@${CC} -c ${CFLAGS} $< @${CC} -c ${CFLAGS} $<
${OBJ}: dmenu.h config.h ${OBJ}: dmenu.h config.h config.mk
config.h: config.h:
@echo creating $@ from config.default.h @echo creating $@ from config.default.h
@@ -27,7 +27,7 @@ config.h:
dmenu: ${OBJ} dmenu: ${OBJ}
@echo LD $@ @echo LD $@
@${CC} -o $@ ${OBJ} ${LDFLAGS} @${LD} -o $@ ${OBJ} ${LDFLAGS}
@strip $@ @strip $@
clean: clean:

3
README
View File

@@ -1,7 +1,6 @@
dmenu - dynamic menu dmenu - dynamic menu
-------------------- --------------------
dmenu is a generic, highly customizable, and efficient menu for the dmenu is a generic, highly customizable, and efficient menu for X.
X Window System.
Requirements Requirements

View File

@@ -4,6 +4,6 @@
*/ */
#define FONT "-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*" #define FONT "-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*"
#define BGCOLOR "#eeeeee" #define BGCOLOR "#666699"
#define FGCOLOR "#666699" #define FGCOLOR "#eeeeee"
#define BORDERCOLOR "#9999CC" #define BORDERCOLOR "#9999CC"

View File

@@ -1,5 +1,5 @@
# dmenu version # dmenu version
VERSION = 0.3 VERSION = 0.5
# Customize below to fit your system # Customize below to fit your system
@@ -11,7 +11,7 @@ X11INC = /usr/X11R6/include
X11LIB = /usr/X11R6/lib X11LIB = /usr/X11R6/lib
# includes and libs # includes and libs
INCS = -I/usr/lib -I${X11INC} INCS = -I. -I/usr/include -I${X11INC}
LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 LIBS = -L/usr/lib -lc -L${X11LIB} -lX11
# flags # flags
@@ -20,5 +20,6 @@ LDFLAGS = ${LIBS}
#CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" #CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
#LDFLAGS = -g ${LIBS} #LDFLAGS = -g ${LIBS}
# compiler # compiler and linker
CC = cc CC = cc
LD = ${CC}

View File

@@ -7,7 +7,7 @@ dmenu \- dynamic menu
.SH DESCRIPTION .SH DESCRIPTION
.SS Overview .SS Overview
.B dmenu .B dmenu
is a generic, highly customizable, and efficient menu for the X Window System, is a generic, highly customizable, and efficient menu for X,
originally designed for originally designed for
.BR dwm (1). .BR dwm (1).
It supports arbitrary, user defined menu contents. It supports arbitrary, user defined menu contents.

49
draw.c
View File

@@ -9,26 +9,6 @@
/* static */ /* static */
static void
drawborder(void)
{
XPoint points[5];
XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
XSetForeground(dpy, dc.gc, dc.border);
points[0].x = dc.x;
points[0].y = dc.y;
points[1].x = dc.w - 1;
points[1].y = 0;
points[2].x = 0;
points[2].y = dc.h - 1;
points[3].x = -(dc.w - 1);
points[3].y = 0;
points[4].x = 0;
points[4].y = -(dc.h - 1);
XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious);
}
static unsigned int static unsigned int
textnw(const char *text, unsigned int len) textnw(const char *text, unsigned int len)
{ {
@@ -48,21 +28,34 @@ drawtext(const char *text, Bool invert, Bool border)
{ {
int x, y, w, h; int x, y, w, h;
static char buf[256]; static char buf[256];
unsigned int len; unsigned int len, olen;
XGCValues gcv; XGCValues gcv;
XPoint points[5];
XRectangle r = { dc.x, dc.y, dc.w, dc.h }; XRectangle r = { dc.x, dc.y, dc.w, dc.h };
XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg); XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg);
XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
w = 0; w = 0;
if(border) if(border) {
drawborder(); points[0].x = dc.x;
points[0].y = dc.y;
points[1].x = dc.w - 1;
points[1].y = 0;
points[2].x = 0;
points[2].y = dc.h - 1;
points[3].x = -(dc.w - 1);
points[3].y = 0;
points[4].x = 0;
points[4].y = -(dc.h - 1);
XSetForeground(dpy, dc.gc, dc.border);
XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious);
}
if(!text) if(!text)
return; return;
len = strlen(text); olen = len = strlen(text);
if(len >= sizeof(buf)) if(len >= sizeof(buf))
len = sizeof(buf) - 1; len = sizeof(buf) - 1;
memcpy(buf, text, len); memcpy(buf, text, len);
@@ -75,6 +68,14 @@ drawtext(const char *text, Bool invert, Bool border)
/* shorten text if necessary */ /* shorten text if necessary */
while(len && (w = textnw(buf, len)) > dc.w - h) while(len && (w = textnw(buf, len)) > dc.w - h)
buf[--len] = 0; buf[--len] = 0;
if(len < olen) {
if(len > 1)
buf[len - 1] = '.';
if(len > 2)
buf[len - 2] = '.';
if(len > 3)
buf[len - 3] = '.';
}
if(w > dc.w) if(w > dc.w)
return; /* too long */ return; /* too long */

20
main.c
View File

@@ -29,7 +29,7 @@ static int mx, my, mw, mh;
static int ret = 0; static int ret = 0;
static int nitem = 0; static int nitem = 0;
static unsigned int cmdw = 0; static unsigned int cmdw = 0;
static Bool done = False; static Bool running = True;
static Item *allitems = NULL; /* first of all items */ static Item *allitems = NULL; /* first of all items */
static Item *item = NULL; /* first of pattern matching items */ static Item *item = NULL; /* first of pattern matching items */
static Item *sel = NULL; static Item *sel = NULL;
@@ -219,11 +219,11 @@ kpress(XKeyEvent * e)
else if(text) else if(text)
fprintf(stdout, "%s", text); fprintf(stdout, "%s", text);
fflush(stdout); fflush(stdout);
done = True; running = False;
break; break;
case XK_Escape: case XK_Escape:
ret = 1; ret = 1;
done = True; running = False;
break; break;
case XK_BackSpace: case XK_BackSpace:
if((i = len)) { if((i = len)) {
@@ -290,6 +290,7 @@ int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
char *maxname; char *maxname;
Item *i;
XEvent ev; XEvent ev;
XSetWindowAttributes wa; XSetWindowAttributes wa;
@@ -336,6 +337,7 @@ main(int argc, char *argv[])
/* pixmap */ /* pixmap */
dc.drawable = XCreatePixmap(dpy, root, mw, mh, DefaultDepth(dpy, screen)); dc.drawable = XCreatePixmap(dpy, root, mw, mh, DefaultDepth(dpy, screen));
dc.gc = XCreateGC(dpy, root, 0, 0); dc.gc = XCreateGC(dpy, root, 0, 0);
XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
if(maxname) if(maxname)
cmdw = textw(maxname); cmdw = textw(maxname);
@@ -349,7 +351,7 @@ main(int argc, char *argv[])
XSync(dpy, False); XSync(dpy, False);
/* main event loop */ /* main event loop */
while(!done && !XNextEvent(dpy, &ev)) { while(running && !XNextEvent(dpy, &ev)) {
switch (ev.type) { switch (ev.type) {
case KeyPress: case KeyPress:
kpress(&ev.xkey); kpress(&ev.xkey);
@@ -364,6 +366,16 @@ main(int argc, char *argv[])
} }
XUngrabKeyboard(dpy, CurrentTime); XUngrabKeyboard(dpy, CurrentTime);
while(allitems) {
i = allitems->next;
free(allitems->text);
free(allitems);
allitems = i;
}
if(dc.font.set)
XFreeFontSet(dpy, dc.font.set);
else
XFreeFont(dpy, dc.font.xfont);
XFreePixmap(dpy, dc.drawable); XFreePixmap(dpy, dc.drawable);
XFreeGC(dpy, dc.gc); XFreeGC(dpy, dc.gc);
XDestroyWindow(dpy, win); XDestroyWindow(dpy, win);

6
util.c
View File

@@ -13,7 +13,7 @@
/* static */ /* static */
static void static void
bad_malloc(unsigned int size) badmalloc(unsigned int size)
{ {
eprint("fatal: could not malloc() %u bytes\n", size); eprint("fatal: could not malloc() %u bytes\n", size);
} }
@@ -25,7 +25,7 @@ emalloc(unsigned int size)
{ {
void *res = malloc(size); void *res = malloc(size);
if(!res) if(!res)
bad_malloc(size); badmalloc(size);
return res; return res;
} }
@@ -45,6 +45,6 @@ estrdup(const char *str)
{ {
void *res = strdup(str); void *res = strdup(str);
if(!res) if(!res)
bad_malloc(strlen(str)); badmalloc(strlen(str));
return res; return res;
} }