all repos — dmenu @ 6c1d0e4d60b239e9533def6feaf8eb2138858c3e

my build of dmenu

fixed offsets, updated eprint, cleaned up
Connor Lane Smith cls@lubutu.com
Thu, 24 Jun 2010 14:22:34 +0100
commit

6c1d0e4d60b239e9533def6feaf8eb2138858c3e

parent

6efe1932be9425896c34f54501a6194286dd0503

4 files changed, 42 insertions(+), 33 deletions(-)

jump to
M dinput.cdinput.c

@@ -164,7 +164,7 @@ {

FILE *fp; char *s; if(!(fp = popen("sselp", "r"))) - eprint("dinput: cannot popen sselp\n"); + eprint("cannot popen sselp\n"); s = fgets(buf, sizeof buf, fp); pclose(fp); if(s == NULL)

@@ -322,6 +322,7 @@ unsigned int i;

Bool topbar = True; /* command line args */ + progname = argv[0]; for(i = 1; i < argc; i++) if(!strcmp(argv[i], "-b")) topbar = False;

@@ -356,7 +357,7 @@ " [-p <prompt>] [-sb <color>] [-sf <color>] [-v] [<text>]\n");

if(!setlocale(LC_CTYPE, "") || !XSupportsLocale()) fprintf(stderr, "dinput: warning: no locale support\n"); if(!(dpy = XOpenDisplay(NULL))) - eprint("dinput: cannot open display\n"); + eprint("cannot open display\n"); screen = DefaultScreen(dpy); if(!parent) parent = RootWindow(dpy, screen);
M dmenu.cdmenu.c

@@ -34,6 +34,7 @@ static void calcoffsetsh(void);

static void calcoffsetsv(void); static char *cistrstr(const char *s, const char *sub); static void cleanup(void); +static void dinput(void); static void drawmenu(void); static void drawmenuh(void); static void drawmenuv(void);

@@ -89,28 +90,25 @@ void

calcoffsetsh(void) { unsigned int w; - if(!curr) - return; - w = promptw + cmdw + 2 * spaceitem; - for(next = curr; next && w < mw; next=next->right) - w += MIN(textw(next->text), mw / 3); - w = promptw + cmdw + 2 * spaceitem; - for(prev = curr; prev && prev->left && w < mw; prev=prev->left) - w += MIN(textw(prev->left->text), mw / 3); + w = promptw + cmdw + (2 * spaceitem); + for(next = curr; next; next = next->right) + if((w += MIN(textw(next->text), mw / 3)) > mw) + break; + w = promptw + cmdw + (2 * spaceitem); + for(prev = curr; prev && prev->left; prev = prev->left) + if((w += MIN(textw(prev->left->text), mw / 3)) > mw) + break; } void calcoffsetsv(void) { - unsigned int h; + unsigned int i; - if(!curr) - return; - h = (dc.font.height + 2) * lines; - for(next = curr; next && h > 0; next = next->right) - h -= dc.font.height + 2; - h = (dc.font.height + 2) * lines; - for(prev = curr; prev && prev->left && h > 0; prev = prev->left) - h -= dc.font.height + 2; + next = prev = curr; + for(i = 0; i < lines && next; i++) + next = next->right; + for(i = 0; i < lines && prev && prev->left; i++) + prev = prev->left; } char *

@@ -148,6 +146,13 @@ }

drawcleanup(); XDestroyWindow(dpy, win); XUngrabKeyboard(dpy, CurrentTime); +} + +void +dinput(void) { + cleanup(); + execlp("dinput", "dinput", text, NULL); /* todo: argv */ + eprint("cannot exec dinput\n"); } void

@@ -290,8 +295,7 @@ text[++i] = '\0';

match(text); break; case XK_x: - execlp("dinput", "dinput", text, NULL); /* todo: argv */ - eprint("dmenu: cannot exec dinput:"); + dinput(); break; } }

@@ -369,10 +373,9 @@ calcoffsets();

} break; case XK_Tab: - if(!sel) - return; - strncpy(text, sel->text, sizeof text); - match(text); + if(sel) + strncpy(text, sel->text, sizeof text); + dinput(); break; } drawmenu();

@@ -431,11 +434,11 @@ len = strlen(buf);

if(buf[len-1] == '\n') buf[--len] = '\0'; if(!(p = strdup(buf))) - eprint("dmenu: cannot strdup %u bytes\n", len); + eprint("cannot strdup %u bytes\n", len); if((max = MAX(max, len)) == len) maxname = p; if(!(new = malloc(sizeof *new))) - eprint("dmenu: cannot malloc %u bytes\n", sizeof *new); + eprint("cannot malloc %u bytes\n", sizeof *new); new->next = new->left = new->right = NULL; new->text = p; if(!i)

@@ -544,6 +547,7 @@ unsigned int i;

Bool topbar = True; /* command line args */ + progname = argv[0]; for(i = 1; i < argc; i++) if(!strcmp(argv[i], "-i")) { fstrncmp = strncasecmp;

@@ -585,7 +589,7 @@ " [-nf <color>] [-p <prompt>] [-sb <color>] [-sf <color>] [-v]\n");

if(!setlocale(LC_CTYPE, "") || !XSupportsLocale()) fprintf(stderr, "dmenu: warning: no locale support\n"); if(!(dpy = XOpenDisplay(NULL))) - eprint("dmenu: cannot open display\n"); + eprint("cannot open display\n"); screen = DefaultScreen(dpy); if(!parent) parent = RootWindow(dpy, screen);
M draw.cdraw.c

@@ -13,6 +13,9 @@ /* macros */

#define MIN(a, b) ((a) < (b) ? (a) : (b)) #define MAX(a, b) ((a) > (b) ? (a) : (b)) +/* variables */ +char *progname; + void drawcleanup(void) { if(dc.font.set)

@@ -71,6 +74,7 @@ void

eprint(const char *errstr, ...) { va_list ap; + fprintf(stderr, "%s: ", progname); va_start(ap, errstr); vfprintf(stderr, errstr, ap); va_end(ap);

@@ -83,7 +87,7 @@ Colormap cmap = DefaultColormap(dpy, screen);

XColor color; if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color)) - eprint("drawtext: cannot allocate color '%s'\n", colstr); + eprint("cannot allocate color '%s'\n", colstr); return color.pixel; }

@@ -92,8 +96,8 @@ initfont(const char *fontstr) {

char *def, **missing = NULL; int i, n; - if(!fontstr || fontstr[0] == '\0') - eprint("drawtext: cannot load font: '%s'\n", fontstr); + if(!fontstr || !*fontstr) + eprint("cannot load null font\n"); dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def); if(missing) XFreeStringList(missing);

@@ -111,7 +115,7 @@ }

else { if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr)) && !(dc.font.xfont = XLoadQueryFont(dpy, "fixed"))) - eprint("drawtext: cannot load font: '%s'\n", fontstr); + eprint("cannot load font '%s'\n", fontstr); dc.font.ascent = dc.font.xfont->ascent; dc.font.descent = dc.font.xfont->descent; }
M draw.hdraw.h

@@ -30,13 +30,13 @@ int textnw(const char *text, unsigned int len);

int textw(const char *text); /* variables */ +extern char *progname; extern Display *dpy; extern DC dc; extern int screen; extern unsigned int mw, mh; extern Window parent; -/* style */ extern const char *font; extern const char *normbgcolor; extern const char *normfgcolor;