Fix handling of input strings
This commit is contained in:
parent
2f398981fe
commit
b6d2cc9aea
1 changed files with 21 additions and 14 deletions
35
dmenu.c
35
dmenu.c
|
@ -308,13 +308,21 @@ keypress(XKeyEvent *ev)
|
||||||
{
|
{
|
||||||
char buf[32];
|
char buf[32];
|
||||||
int len;
|
int len;
|
||||||
KeySym ksym = NoSymbol;
|
KeySym ksym;
|
||||||
Status status;
|
Status status;
|
||||||
|
|
||||||
len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status);
|
len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status);
|
||||||
if (status == XBufferOverflow)
|
switch (status) {
|
||||||
|
default: /* XLookupNone, XBufferOverflow */
|
||||||
return;
|
return;
|
||||||
if (ev->state & ControlMask)
|
case XLookupChars:
|
||||||
|
goto insert;
|
||||||
|
case XLookupKeySym:
|
||||||
|
case XLookupBoth:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ev->state & ControlMask) {
|
||||||
switch(ksym) {
|
switch(ksym) {
|
||||||
case XK_a: ksym = XK_Home; break;
|
case XK_a: ksym = XK_Home; break;
|
||||||
case XK_b: ksym = XK_Left; break;
|
case XK_b: ksym = XK_Left; break;
|
||||||
|
@ -352,12 +360,10 @@ keypress(XKeyEvent *ev)
|
||||||
return;
|
return;
|
||||||
case XK_Left:
|
case XK_Left:
|
||||||
movewordedge(-1);
|
movewordedge(-1);
|
||||||
ksym = NoSymbol;
|
goto draw;
|
||||||
break;
|
|
||||||
case XK_Right:
|
case XK_Right:
|
||||||
movewordedge(+1);
|
movewordedge(+1);
|
||||||
ksym = NoSymbol;
|
goto draw;
|
||||||
break;
|
|
||||||
case XK_Return:
|
case XK_Return:
|
||||||
case XK_KP_Enter:
|
case XK_KP_Enter:
|
||||||
break;
|
break;
|
||||||
|
@ -367,16 +373,14 @@ keypress(XKeyEvent *ev)
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (ev->state & Mod1Mask)
|
} else if (ev->state & Mod1Mask) {
|
||||||
switch(ksym) {
|
switch(ksym) {
|
||||||
case XK_b:
|
case XK_b:
|
||||||
movewordedge(-1);
|
movewordedge(-1);
|
||||||
ksym = NoSymbol;
|
goto draw;
|
||||||
break;
|
|
||||||
case XK_f:
|
case XK_f:
|
||||||
movewordedge(+1);
|
movewordedge(+1);
|
||||||
ksym = NoSymbol;
|
goto draw;
|
||||||
break;
|
|
||||||
case XK_g: ksym = XK_Home; break;
|
case XK_g: ksym = XK_Home; break;
|
||||||
case XK_G: ksym = XK_End; break;
|
case XK_G: ksym = XK_End; break;
|
||||||
case XK_h: ksym = XK_Up; break;
|
case XK_h: ksym = XK_Up; break;
|
||||||
|
@ -386,13 +390,14 @@ keypress(XKeyEvent *ev)
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch(ksym) {
|
switch(ksym) {
|
||||||
default:
|
default:
|
||||||
|
insert:
|
||||||
if (!iscntrl(*buf))
|
if (!iscntrl(*buf))
|
||||||
insert(buf, len);
|
insert(buf, len);
|
||||||
break;
|
break;
|
||||||
case NoSymbol:
|
|
||||||
break;
|
|
||||||
case XK_Delete:
|
case XK_Delete:
|
||||||
if (text[cursor] == '\0')
|
if (text[cursor] == '\0')
|
||||||
return;
|
return;
|
||||||
|
@ -489,6 +494,8 @@ keypress(XKeyEvent *ev)
|
||||||
match();
|
match();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
draw:
|
||||||
drawmenu();
|
drawmenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue