- if(key[i].k == k && ((state & mask) == mask
- || (mask == XK_NO_MOD && !state))) {
- return (char*)key[i].s;
+ if(mask == XK_NO_MOD && state)
+ continue;
+ if(mask != XK_ANY_MOD && mask != XK_NO_MOD && !state)
+ continue;
+ if((state & mask) != state)
+ continue;
+
+ if((kp->appkey < 0 && IS_SET(MODE_APPKEYPAD)) ||
+ (kp->appkey > 0 && !IS_SET(MODE_APPKEYPAD))) {
+ continue;
+ }
+
+ if((kp->appcursor < 0 && IS_SET(MODE_APPCURSOR)) ||
+ (kp->appcursor > 0 && !IS_SET(MODE_APPCURSOR))) {
+ continue;
+ }
+
+ if((kp->crlf < 0 && IS_SET(MODE_CRLF)) ||
+ (kp->crlf > 0 && !IS_SET(MODE_CRLF))) {
+ continue;