Xinqi Bao's Git
projects
/
dmenu.git
/ commitdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
patch
|
inline
| side by side (from parent 1:
2f39898
)
Fix handling of input strings
author
Hiltjo Posthuma <
[email protected]
>
Fri, 16 Mar 2018 15:51:22 +0000
(16:51 +0100)
committer
Hiltjo Posthuma <
[email protected]
>
Sun, 22 Apr 2018 12:09:05 +0000
(14:09 +0200)
dmenu.c
patch
|
blob
|
history
diff --git
a/dmenu.c
b/dmenu.c
index
5e9c367
..
c852e92
100644
(file)
--- a/
dmenu.c
+++ b/
dmenu.c
@@
-308,13
+308,21
@@
keypress(XKeyEvent *ev)
{
char buf[32];
int len;
{
char buf[32];
int len;
- KeySym ksym
= NoSymbol
;
+ KeySym ksym;
Status status;
len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status);
Status 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) {
case XK_a: ksym = XK_Home; break;
case XK_b: ksym = XK_Left; break;
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);
return;
case XK_Left:
movewordedge(-1);
- ksym = NoSymbol;
- break;
+ goto draw;
case XK_Right:
movewordedge(+1);
case XK_Right:
movewordedge(+1);
- ksym = NoSymbol;
- break;
+ goto draw;
case XK_Return:
case XK_KP_Enter:
break;
case XK_Return:
case XK_KP_Enter:
break;
@@
-367,16
+373,14
@@
keypress(XKeyEvent *ev)
default:
return;
}
default:
return;
}
- else if (ev->state & Mod1Mask)
+ } else if (ev->state & Mod1Mask) {
switch(ksym) {
case XK_b:
movewordedge(-1);
switch(ksym) {
case XK_b:
movewordedge(-1);
- ksym = NoSymbol;
- break;
+ goto draw;
case XK_f:
movewordedge(+1);
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;
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;
}
default:
return;
}
+ }
+
switch(ksym) {
default:
switch(ksym) {
default:
+insert:
if (!iscntrl(*buf))
insert(buf, len);
break;
if (!iscntrl(*buf))
insert(buf, len);
break;
- case NoSymbol:
- break;
case XK_Delete:
if (text[cursor] == '\0')
return;
case XK_Delete:
if (text[cursor] == '\0')
return;
@@
-489,6
+494,8
@@
keypress(XKeyEvent *ev)
match();
break;
}
match();
break;
}
+
+draw:
drawmenu();
}
drawmenu();
}