X-Git-Url: https://git.xinqibao.xyz/dmenu.git/blobdiff_plain/65912f2a96d32600a07b963e9149f70ca22e73bb..201b056e39267ab34ee777f7766457ef51a9da12:/main.c?ds=sidebyside diff --git a/main.c b/main.c index 964fad6..1c6e57f 100644 --- a/main.c +++ b/main.c @@ -178,6 +178,29 @@ kpress(XKeyEvent * e) { break; } } + if(e->state & Mod1Mask) { + switch(ksym) { + default: return; + case XK_h: + ksym = XK_Left; + break; + case XK_l: + ksym = XK_Right; + break; + case XK_j: + ksym = XK_Next; + break; + case XK_k: + ksym = XK_Prior; + break; + case XK_g: + ksym = XK_Home; + break; + case XK_G: + ksym = XK_End; + break; + } + } switch(ksym) { default: if(num && !iscntrl((int) buf[0])) { @@ -200,11 +223,13 @@ kpress(XKeyEvent * e) { } break; case XK_End: + if(!item) + return; while(next) { sel = curr = next; calcoffsets(); } - while(sel->right) + while(sel && sel->right) sel = sel->right; break; case XK_Escape: @@ -212,6 +237,8 @@ kpress(XKeyEvent * e) { running = False; break; case XK_Home: + if(!item) + return; sel = curr = item; calcoffsets(); break; @@ -225,16 +252,16 @@ kpress(XKeyEvent * e) { } break; case XK_Next: - if(next) { - sel = curr = next; - calcoffsets(); - } + if(!next) + return; + sel = curr = next; + calcoffsets(); break; case XK_Prior: - if(prev) { - sel = curr = prev; - calcoffsets(); - } + if(!prev) + return; + sel = curr = prev; + calcoffsets(); break; case XK_Return: if((e->state & ShiftMask) && text)