diff options
Diffstat (limited to 'dmenu.c')
| -rw-r--r-- | dmenu.c | 19 |
1 files changed, 13 insertions, 6 deletions
| @@ -243,11 +243,8 @@ keypress(XKeyEvent *ev) { | |||
| 243 | len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status); | 243 | len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status); |
| 244 | if(status == XBufferOverflow) | 244 | if(status == XBufferOverflow) |
| 245 | return; | 245 | return; |
| 246 | if(ev->state & ControlMask) { | 246 | if(ev->state & ControlMask) |
| 247 | KeySym lower, upper; | 247 | switch(ksym) { |
| 248 | |||
| 249 | XConvertCase(ksym, &lower, &upper); | ||
| 250 | switch(lower) { | ||
| 251 | case XK_a: ksym = XK_Home; break; | 248 | case XK_a: ksym = XK_Home; break; |
| 252 | case XK_b: ksym = XK_Left; break; | 249 | case XK_b: ksym = XK_Left; break; |
| 253 | case XK_c: ksym = XK_Escape; break; | 250 | case XK_c: ksym = XK_Escape; break; |
| @@ -281,7 +278,17 @@ keypress(XKeyEvent *ev) { | |||
| 281 | default: | 278 | default: |
| 282 | return; | 279 | return; |
| 283 | } | 280 | } |
| 284 | } | 281 | else if(ev->state & Mod1Mask) |
| 282 | switch(ksym) { | ||
| 283 | case XK_g: ksym = XK_Home; break; | ||
| 284 | case XK_G: ksym = XK_End; break; | ||
| 285 | case XK_h: ksym = XK_Prior; break; | ||
| 286 | case XK_j: ksym = XK_Up; break; | ||
| 287 | case XK_k: ksym = XK_Down; break; | ||
| 288 | case XK_l: ksym = XK_Next; break; | ||
| 289 | default: | ||
| 290 | return; | ||
| 291 | } | ||
| 285 | switch(ksym) { | 292 | switch(ksym) { |
| 286 | default: | 293 | default: |
| 287 | if(!iscntrl(*buf)) | 294 | if(!iscntrl(*buf)) |
