/* See LICENSE file for copyright and license details. */
#include <ctype.h>
#include <locale.h>
-#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct item {
char *text;
struct item *left, *right;
- bool out;
+ int out;
};
static char text[BUFSIZ] = "";
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);
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]))
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 */
exit(0);
}
if (sel)
- sel->out = true;
+ sel->out = 1;
break;
case XK_Right:
if (text[cursor] != '\0') {
*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);
}
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)
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 */
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;