dmenu

My custom build of dmenu.
Log | Files | Refs | README | LICENSE

commit b6d2cc9aea979cb3557db39dbe65a2870d13e597
parent 2f398981feb562285b0a96cd315bf2b3244c7309
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Fri, 16 Mar 2018 16:51:22 +0100

Fix handling of input strings

Diffstat:
Mdmenu.c | 35+++++++++++++++++++++--------------
1 file changed, 21 insertions(+), 14 deletions(-)

diff --git a/dmenu.c b/dmenu.c @@ -308,13 +308,21 @@ keypress(XKeyEvent *ev) { char buf[32]; int len; - KeySym ksym = NoSymbol; + KeySym ksym; Status status; len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status); - if (status == XBufferOverflow) + switch (status) { + default: /* XLookupNone, XBufferOverflow */ return; - if (ev->state & ControlMask) + case XLookupChars: + goto insert; + case XLookupKeySym: + case XLookupBoth: + break; + } + + if (ev->state & ControlMask) { switch(ksym) { case XK_a: ksym = XK_Home; break; case XK_b: ksym = XK_Left; break; @@ -352,12 +360,10 @@ keypress(XKeyEvent *ev) return; case XK_Left: movewordedge(-1); - ksym = NoSymbol; - break; + goto draw; case XK_Right: movewordedge(+1); - ksym = NoSymbol; - break; + goto draw; case XK_Return: case XK_KP_Enter: break; @@ -367,16 +373,14 @@ keypress(XKeyEvent *ev) default: return; } - else if (ev->state & Mod1Mask) + } else if (ev->state & Mod1Mask) { switch(ksym) { case XK_b: movewordedge(-1); - ksym = NoSymbol; - break; + goto draw; case XK_f: movewordedge(+1); - ksym = NoSymbol; - break; + goto draw; case XK_g: ksym = XK_Home; break; case XK_G: ksym = XK_End; break; case XK_h: ksym = XK_Up; break; @@ -386,13 +390,14 @@ keypress(XKeyEvent *ev) default: return; } + } + switch(ksym) { default: +insert: if (!iscntrl(*buf)) insert(buf, len); break; - case NoSymbol: - break; case XK_Delete: if (text[cursor] == '\0') return; @@ -489,6 +494,8 @@ keypress(XKeyEvent *ev) match(); break; } + +draw: drawmenu(); }