X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=dmenu.c;h=e0c2f80444f9fb8b3ad4f864d16e8b358117b29e;hb=b3d9451c2ddfad7c1b10e9a868afed4d92b37e41;hp=c9fb38bde2e487574f8367d33a6a18979bfdac9c;hpb=acbf35a5e35b6f6a7dd3f8da49a6e5ec5ac075ce;p=dmenu.git diff --git a/dmenu.c b/dmenu.c index c9fb38b..e0c2f80 100644 --- a/dmenu.c +++ b/dmenu.c @@ -1,7 +1,6 @@ /* See LICENSE file for copyright and license details. */ #include #include -#include #include #include #include @@ -32,7 +31,7 @@ enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes */ struct item { char *text; struct item *left, *right; - bool out; + int out; }; static char text[BUFSIZ] = ""; @@ -92,13 +91,13 @@ calcoffsets(void) static void cleanup(void) { + size_t i; + XUngrabKey(dpy, AnyKey, AnyModifier, root); - drw_clr_free(scheme[SchemeNorm].bg); - drw_clr_free(scheme[SchemeNorm].fg); - drw_clr_free(scheme[SchemeSel].fg); - drw_clr_free(scheme[SchemeSel].bg); - drw_clr_free(scheme[SchemeOut].fg); - drw_clr_free(scheme[SchemeOut].bg); + for (i = 0; i < SchemeLast; i++) { + drw_clr_free(scheme[i].bg); + drw_clr_free(scheme[i].fg); + } drw_free(drw); XSync(dpy, False); XCloseDisplay(dpy); @@ -219,7 +218,7 @@ match(void) len = tokc ? strlen(tokv[0]) : 0; matches = lprefix = lsubstr = matchend = prefixend = substrend = NULL; - textsize = strlen(text) + 1; + textsize = strlen(text); for (item = items; item && item->text; item++) { for (i = 0; i < tokc; i++) if (!fstrstr(item->text, tokv[i])) @@ -315,9 +314,11 @@ keypress(XKeyEvent *ev) insert(NULL, 0 - cursor); break; case XK_w: /* delete word */ - while (cursor > 0 && text[nextrune(-1)] == ' ') + while (cursor > 0 && strchr(worddelimiters, + text[nextrune(-1)])) insert(NULL, nextrune(-1) - cursor); - while (cursor > 0 && text[nextrune(-1)] != ' ') + while (cursor > 0 && !strchr(worddelimiters, + text[nextrune(-1)])) insert(NULL, nextrune(-1) - cursor); break; case XK_y: /* paste selection */ @@ -421,7 +422,7 @@ keypress(XKeyEvent *ev) exit(0); } if (sel) - sel->out = true; + sel->out = 1; break; case XK_Right: if (text[cursor] != '\0') { @@ -480,7 +481,7 @@ readstdin(void) *p = '\0'; if (!(items[i].text = strdup(buf))) die("cannot strdup %u bytes:", strlen(buf) + 1); - items[i].out = false; + items[i].out = 0; if (strlen(items[i].text) > max) max = strlen(maxstr = items[i].text); } @@ -552,7 +553,7 @@ setup(void) XGetInputFocus(dpy, &w, &di); if (mon != -1 && mon < n) i = mon; - if (!i && w != root && w != PointerRoot && w != None) { + else if (w != root && w != PointerRoot && w != None) { /* find top-level window containing current input focus */ do { if (XQueryTree(dpy, (pw = w), &dw, &w, &dws, &du) && dws) @@ -617,8 +618,7 @@ usage(void) int main(int argc, char *argv[]) { - bool fast = false; - int i; + int i, fast = 0; for (i = 1; i < argc; i++) /* these options take no arguments */ @@ -626,9 +626,9 @@ main(int argc, char *argv[]) puts("dmenu-"VERSION); exit(0); } else if (!strcmp(argv[i], "-b")) /* appears at the bottom of the screen */ - topbar = false; + topbar = 0; else if (!strcmp(argv[i], "-f")) /* grabs keyboard before reading stdin */ - fast = true; + fast = 1; else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */ fstrncmp = strncasecmp; fstrstr = cistrstr;