dmenu

Dmenu fork with xft fonts.
git clone git://r-36.net/dmenu
Log | Files | Refs | README | LICENSE

commit 595e7976601fc77acf12015d3f5f6843e2cdd706
parent bba30e26863c75e66678f9d028d394883d86150a
Author: Connor Lane Smith <cls@lubutu.com>
Date:   Wed, 23 Jun 2010 13:29:15 +0100

added draw.h
Diffstat:
Makefile | 6+++---
dinput.c | 23++++-------------------
dmenu.c | 22++++------------------
draw.c | 57+++++++++++++++++++++++++--------------------------------
draw.h | 45+++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 81 insertions(+), 72 deletions(-)

diff --git a/Makefile b/Makefile @@ -6,7 +6,7 @@ include config.mk SRC = dinput.c dmenu.c draw.c OBJ = ${SRC:.c=.o} -all: options dinput dmenu +all: options draw.o dinput dmenu options: @echo dmenu build options: @@ -18,7 +18,7 @@ options: @echo CC $< @${CC} -c ${CFLAGS} $< -${OBJ}: config.h config.mk draw.c +${OBJ}: config.h config.mk draw.h config.h: @echo creating $@ from config.def.h @@ -26,7 +26,7 @@ config.h: .o: @echo CC -o $@ - @${CC} -o $@ $< ${LDFLAGS} + @${CC} -o $@ $< draw.o ${LDFLAGS} clean: @echo cleaning diff --git a/dinput.c b/dinput.c @@ -25,32 +25,27 @@ static void cleanup(void); static void drawcursor(void); static void drawinput(void); -static void eprint(const char *errstr, ...); static Bool grabkeyboard(void); static void kpress(XKeyEvent * e); static void run(void); static void setup(Bool topbar); #include "config.h" +#include "draw.h" /* variables */ static char *prompt = NULL; static char text[4096]; static int promptw = 0; static int ret = 0; -static int screen; -static unsigned int mw, mh; static unsigned int cursor = 0; static unsigned int numlockmask = 0; static Bool running = True; -static Display *dpy; -static Window parent, win; - -#include "draw.c" +static Window win; void cleanup(void) { - dccleanup(); + drawcleanup(); XDestroyWindow(dpy, win); XUngrabKeyboard(dpy, CurrentTime); } @@ -86,16 +81,6 @@ drawinput(void) XFlush(dpy); } -void -eprint(const char *errstr, ...) { - va_list ap; - - va_start(ap, errstr); - vfprintf(stderr, errstr, ap); - va_end(ap); - exit(EXIT_FAILURE); -} - Bool grabkeyboard(void) { unsigned int len; @@ -318,7 +303,7 @@ setup(Bool topbar) { DefaultVisual(dpy, screen), CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); - dcsetup(); + drawsetup(); if(prompt) promptw = MIN(textw(prompt), mw / 5); cursor = strlen(text); diff --git a/dmenu.c b/dmenu.c @@ -46,6 +46,7 @@ static void run(void); static void setup(Bool topbar); #include "config.h" +#include "draw.h" /* variables */ static char *maxname = NULL; @@ -54,25 +55,20 @@ static char text[4096]; static int cmdw = 0; static int promptw = 0; static int ret = 0; -static int screen; -static unsigned int mw, mh; static unsigned int numlockmask = 0; static Bool running = True; -static Display *dpy; static Item *allitems = NULL; /* first of all items */ static Item *item = NULL; /* first of pattern matching items */ static Item *sel = NULL; static Item *next = NULL; static Item *prev = NULL; static Item *curr = NULL; -static Window parent, win; +static Window win; static int (*fstrncmp)(const char *, const char *, size_t) = strncmp; static char *(*fstrstr)(const char *, const char *) = strstr; static unsigned int lines = 0; static void (*calcoffsets)(void) = calcoffsetsh; -#include "draw.c" - void appenditem(Item *i, Item **list, Item **last) { if(!(*last)) @@ -136,7 +132,7 @@ cistrstr(const char *s, const char *sub) { void cleanup(void) { - dccleanup(); + drawcleanup(); XDestroyWindow(dpy, win); XUngrabKeyboard(dpy, CurrentTime); } @@ -202,16 +198,6 @@ drawmenuv(void) { drawtext(NULL, dc.norm); } -void -eprint(const char *errstr, ...) { - va_list ap; - - va_start(ap, errstr); - vfprintf(stderr, errstr, ap); - va_end(ap); - exit(EXIT_FAILURE); -} - Bool grabkeyboard(void) { unsigned int len; @@ -529,7 +515,7 @@ setup(Bool topbar) { DefaultVisual(dpy, screen), CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); - dcsetup(); + drawsetup(); if(maxname) cmdw = MIN(textw(maxname), mw / 3); if(prompt) diff --git a/draw.c b/draw.c @@ -1,37 +1,20 @@ /* See LICENSE file for copyright and license details. */ - -/* enums */ -enum { ColFG, ColBG, ColLast }; - -/* typedefs */ -typedef struct { - int x, y, w, h; - unsigned long norm[ColLast]; - unsigned long sel[ColLast]; - Drawable drawable; - GC gc; - struct { - XFontStruct *xfont; - XFontSet set; - int ascent; - int descent; - int height; - } font; -} DC; /* draw context */ - -/* forward declarations */ -static void dccleanup(void); -static void dcsetup(void); -static void drawtext(const char *text, unsigned long col[ColLast]); -static unsigned long getcolor(const char *colstr); -static void initfont(const char *fontstr); -static int textnw(const char *text, unsigned int len); -static int textw(const char *text); - -static DC dc; +#include <ctype.h> +#include <locale.h> +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> +#include <X11/Xlib.h> +#include "draw.h" + +/* macros */ +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define MAX(a, b) ((a) > (b) ? (a) : (b)) void -dccleanup(void) { +drawcleanup(void) { if(dc.font.set) XFreeFontSet(dpy, dc.font.set); else @@ -41,7 +24,7 @@ dccleanup(void) { } void -dcsetup(void) { +drawsetup(void) { /* style */ dc.norm[ColBG] = getcolor(normbgcolor); dc.norm[ColFG] = getcolor(normfgcolor); @@ -84,6 +67,16 @@ drawtext(const char *text, unsigned long col[ColLast]) { XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); } +void +eprint(const char *errstr, ...) { + va_list ap; + + va_start(ap, errstr); + vfprintf(stderr, errstr, ap); + va_end(ap); + exit(EXIT_FAILURE); +} + unsigned long getcolor(const char *colstr) { Colormap cmap = DefaultColormap(dpy, screen); diff --git a/draw.h b/draw.h @@ -0,0 +1,45 @@ +/* See LICENSE file for copyright and license details. */ + +/* enums */ +enum { ColFG, ColBG, ColLast }; + +/* typedefs */ +typedef struct { + int x, y, w, h; + unsigned long norm[ColLast]; + unsigned long sel[ColLast]; + Drawable drawable; + GC gc; + struct { + XFontStruct *xfont; + XFontSet set; + int ascent; + int descent; + int height; + } font; +} DC; /* draw context */ + +/* forward declarations */ +void drawcleanup(void); +void drawsetup(void); +void drawtext(const char *text, unsigned long col[ColLast]); +void eprint(const char *errstr, ...); +unsigned long getcolor(const char *colstr); +void initfont(const char *fontstr); +int textnw(const char *text, unsigned int len); +int textw(const char *text); + +/* variables */ +Display *dpy; +DC dc; +int screen; +unsigned int mw, mh; +unsigned int spaceitem; +Window parent; + +/* style */ +const char *font; +const char *normbgcolor; +const char *normfgcolor; +const char *selbgcolor; +const char *selfgcolor;