- if(key[i].k == k && ((state & mask) == mask
- || (mask == XK_NO_MOD && !state))) {
- return (char*)key[i].s;
+ if(kp->k != k)
+ continue;
+
+ if(!match(mask, state))
+ continue;
+
+ if(kp->appkey > 0) {
+ if(!IS_SET(MODE_APPKEYPAD))
+ continue;
+ if(term.numlock && kp->appkey == 2)
+ continue;
+ } else if(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;