From 9a33a72c6afd9042c8395f4318bf5d21e235694d Mon Sep 17 00:00:00 2001 From: Connor Lane Smith Date: Sun, 20 Jun 2010 15:04:15 +0100 Subject: updated manpage, changed keybinds M- binds tend to be wm level, and there were up to 3 binds for the same action M-{hjkl} also no longer made sense in vlist mode --- dmenu.c | 84 ++++++++++++++++++++++++++++++----------------------------------- 1 file changed, 39 insertions(+), 45 deletions(-) (limited to 'dmenu.c') diff --git a/dmenu.c b/dmenu.c index ec62602..15ce8c7 100644 --- a/dmenu.c +++ b/dmenu.c @@ -355,17 +355,23 @@ kpress(XKeyEvent * e) { /* first check if a control mask is omitted */ if(e->state & ControlMask) { switch(tolower(ksym)) { - default: /* ignore other control sequences */ + default: return; case XK_a: ksym = XK_Home; break; + case XK_b: + ksym = XK_Left; + break; case XK_c: ksym = XK_Escape; break; case XK_e: ksym = XK_End; break; + case XK_f: + ksym = XK_Right; + break; case XK_h: ksym = XK_BackSpace; break; @@ -378,6 +384,12 @@ kpress(XKeyEvent * e) { case XK_k: text[cursor] = '\0'; break; + case XK_n: + ksym = XK_Down; + break; + case XK_p: + ksym = XK_Up; + break; case XK_u: memmove(text, text + cursor, sizeof text - cursor + 1); cursor = 0; @@ -393,31 +405,7 @@ kpress(XKeyEvent * e) { match(text); } break; - } - } - if(CLEANMASK(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; - case XK_p: + case XK_y: { FILE *fp; char *s; @@ -453,6 +441,8 @@ kpress(XKeyEvent * e) { match(text); break; case XK_Delete: + if(cursor == len) + return; for(i = 1; cursor + i < len && !IS_UTF8_1ST_CHAR(text[cursor + i]); i++); memmove(text + cursor, text + cursor + i, sizeof text - cursor); match(text); @@ -482,18 +472,20 @@ kpress(XKeyEvent * e) { calcoffsets(); break; case XK_Left: - case XK_Up: - if(sel && sel->left){ - sel = sel->left; - if(sel->right == curr) { - curr = prev; - calcoffsets(); - } - } - else if(cursor > 0) + if(cursor > 0 && (!sel || !sel->left)) { while(cursor-- > 0 && !IS_UTF8_1ST_CHAR(text[cursor])); - else + break; + } + if(lines > 0) return; + case XK_Up: + if(!sel || !sel->left) + return; + sel = sel->left; + if(sel->right == curr) { + curr = prev; + calcoffsets(); + } break; case XK_Next: if(!next) @@ -516,18 +508,20 @@ kpress(XKeyEvent * e) { running = False; return; case XK_Right: - case XK_Down: - if(cursor < len) + if(cursor < len) { while(cursor++ < len && !IS_UTF8_1ST_CHAR(text[cursor])); - else if(sel && sel->right) { - sel = sel->right; - if(sel == next) { - curr = next; - calcoffsets(); - } + break; } - else + if(lines > 0) + return; + case XK_Down: + if(!sel || !sel->right) return; + sel = sel->right; + if(sel == next) { + curr = next; + calcoffsets(); + } break; case XK_Tab: if(!sel) -- cgit v1.2.3-54-g00ecf