X-Git-Url: https://git.xinqibao.xyz/dmenu.git/blobdiff_plain/96c65400ccdcb76cf20ec7721920f944e6b490ec..18dcf738967a45208e880b72ce273afdd93ee6c7:/dmenu.c diff --git a/dmenu.c b/dmenu.c index 0b42073..8059f29 100644 --- a/dmenu.c +++ b/dmenu.c @@ -39,7 +39,7 @@ static void drawmenu(void); static void drawmenuh(void); static void drawmenuv(void); static Bool grabkeyboard(void); -static void kpress(XKeyEvent * e); +static void kpress(XKeyEvent *e); static void match(char *pattern); static void readstdin(void); static void run(void); @@ -59,6 +59,8 @@ static int screen; static unsigned int lines = 0; static unsigned int numlockmask = 0; static unsigned int mw, mh; +static unsigned long normcol[ColLast]; +static unsigned long selcol[ColLast]; static Bool running = True; static DC dc; static Display *dpy; @@ -159,18 +161,18 @@ drawmenu(void) { dc.y = 0; dc.w = mw; dc.h = mh; - drawtext(&dc, NULL, dc.norm); + drawtext(&dc, NULL, normcol, False); /* print prompt? */ if(prompt) { dc.w = promptw; - drawtext(&dc, prompt, dc.sel); + drawtext(&dc, prompt, selcol, False); dc.x += dc.w; } dc.w = mw - dc.x; /* print command */ if(cmdw && item && lines == 0) dc.w = cmdw; - drawtext(&dc, *text ? text : NULL, dc.norm); + drawtext(&dc, *text ? text : NULL, normcol, False); if(curr) { if(lines > 0) drawmenuv(); @@ -187,16 +189,16 @@ drawmenuh(void) { dc.x += cmdw; dc.w = spaceitem; - drawtext(&dc, curr->left ? "<" : NULL, dc.norm); + drawtext(&dc, curr->left ? "<" : NULL, normcol, False); dc.x += dc.w; - for(i = curr; i != next; i=i->right) { + for(i = curr; i != next; i = i->right) { dc.w = MIN(textw(&dc, i->text), mw / 3); - drawtext(&dc, i->text, (sel == i) ? dc.sel : dc.norm); + drawtext(&dc, i->text, (sel == i) ? selcol : normcol, False); dc.x += dc.w; } dc.w = spaceitem; dc.x = mw - dc.w; - drawtext(&dc, next ? ">" : NULL, dc.norm); + drawtext(&dc, next ? ">" : NULL, normcol, False); } void @@ -206,12 +208,12 @@ drawmenuv(void) { dc.w = mw - dc.x; dc.h = dc.font.height + 2; dc.y = dc.h; - for(i = curr; i != next; i=i->right) { - drawtext(&dc, i->text, (sel == i) ? dc.sel : dc.norm); + for(i = curr; i != next; i = i->right) { + drawtext(&dc, i->text, (sel == i) ? selcol : normcol, False); dc.y += dc.h; } dc.h = mh - dc.y; - drawtext(&dc, NULL, dc.norm); + drawtext(&dc, NULL, normcol, False); } Bool @@ -228,7 +230,7 @@ grabkeyboard(void) { } void -kpress(XKeyEvent * e) { +kpress(XKeyEvent *e) { char buf[sizeof text]; int num; unsigned int i, len; @@ -271,6 +273,7 @@ kpress(XKeyEvent * e) { ksym = XK_Tab; break; case XK_j: + case XK_m: ksym = XK_Return; break; case XK_n: @@ -453,7 +456,7 @@ run(void) { /* main event loop */ while(running && !XNextEvent(dpy, &ev)) - switch (ev.type) { + switch(ev.type) { case KeyPress: kpress(&ev.xkey); break; @@ -490,16 +493,16 @@ setup(Bool topbar) { XFreeModifiermap(modmap); dc.dpy = dpy; - dc.norm[ColBG] = getcolor(&dc, normbgcolor); - dc.norm[ColFG] = getcolor(&dc, normfgcolor); - dc.sel[ColBG] = getcolor(&dc, selbgcolor); - dc.sel[ColFG] = getcolor(&dc, selfgcolor); + normcol[ColBG] = getcolor(&dc, normbgcolor); + normcol[ColFG] = getcolor(&dc, normfgcolor); + selcol[ColBG] = getcolor(&dc, selbgcolor); + selcol[ColFG] = getcolor(&dc, selfgcolor); initfont(&dc, font); /* menu window */ wa.override_redirect = True; wa.background_pixmap = ParentRelative; - wa.event_mask = ExposureMask | ButtonPressMask | KeyPressMask | VisibilityChangeMask; + wa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask; /* menu window geometry */ mh = (dc.font.height + 2) * (lines + 1);