added evil key support to dmenu
b6cd6ed2
1 file(s) · +15 −2
| 15 | 15 | #include <X11/Xutil.h> |
|
| 16 | 16 | #include <X11/keysym.h> |
|
| 17 | 17 | ||
| 18 | + | #define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) |
|
| 19 | + | ||
| 18 | 20 | typedef struct Item Item; |
|
| 19 | 21 | struct Item { |
|
| 20 | 22 | Item *next; /* traverses all items */ |
|
| 31 | 33 | static int nitem = 0; |
|
| 32 | 34 | static unsigned int cmdw = 0; |
|
| 33 | 35 | static unsigned int promptw = 0; |
|
| 36 | + | static unsigned int numlockmask = 0; |
|
| 34 | 37 | static Bool running = True; |
|
| 35 | 38 | static Item *allitems = NULL; /* first of all items */ |
|
| 36 | 39 | static Item *item = NULL; /* first of pattern matching items */ |
|
| 187 | 190 | return; |
|
| 188 | 191 | } |
|
| 189 | 192 | } |
|
| 190 | - | if(e->state & Mod1Mask) { |
|
| 193 | + | if(CLEANMASK(e->state) & Mod1Mask) { |
|
| 191 | 194 | switch(ksym) { |
|
| 192 | 195 | default: return; |
|
| 193 | 196 | case XK_h: |
|
| 347 | 350 | char *selbg = SELBGCOLOR; |
|
| 348 | 351 | char *selfg = SELFGCOLOR; |
|
| 349 | 352 | fd_set rd; |
|
| 350 | - | int i; |
|
| 353 | + | int i, j; |
|
| 351 | 354 | struct timeval timeout; |
|
| 352 | 355 | Item *itm; |
|
| 353 | 356 | XEvent ev; |
|
| 357 | + | XModifierKeymap *modmap; |
|
| 354 | 358 | XSetWindowAttributes wa; |
|
| 355 | 359 | ||
| 356 | 360 | timeout.tv_usec = 0; |
|
| 408 | 412 | if(select(ConnectionNumber(dpy) + 1, &rd, NULL, NULL, &timeout) < 1) |
|
| 409 | 413 | goto UninitializedEnd; |
|
| 410 | 414 | maxname = readstdin(); |
|
| 415 | + | /* init modifier map */ |
|
| 416 | + | modmap = XGetModifierMapping(dpy); |
|
| 417 | + | for (i = 0; i < 8; i++) { |
|
| 418 | + | for (j = 0; j < modmap->max_keypermod; j++) { |
|
| 419 | + | if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) |
|
| 420 | + | numlockmask = (1 << i); |
|
| 421 | + | } |
|
| 422 | + | } |
|
| 423 | + | XFreeModifiermap(modmap); |
|
| 411 | 424 | /* style */ |
|
| 412 | 425 | dc.norm[ColBG] = getcolor(normbg); |
|
| 413 | 426 | dc.norm[ColFG] = getcolor(normfg); |
|