Move key-matching functions into x.c
Modifiers and keysyms are specific to X, and the functions match and kmap are only used in x.c. Needed to global-ize the key arrays and lengths from config.h (for now). Signed-off-by: Devin J. Pohly <djpohly@gmail.com>
This commit is contained in:
48
x.c
48
x.c
@ -116,6 +116,8 @@ static void selrequest(XEvent *);
|
||||
static void selcopy(Time);
|
||||
static void getbuttoninfo(XEvent *);
|
||||
static void mousereport(XEvent *);
|
||||
static char *kmap(KeySym, uint);
|
||||
static int match(uint, uint);
|
||||
|
||||
static void run(void);
|
||||
static void usage(void);
|
||||
@ -1603,6 +1605,52 @@ focus(XEvent *ev)
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
match(uint mask, uint state)
|
||||
{
|
||||
return mask == XK_ANY_MOD || mask == (state & ~ignoremod);
|
||||
}
|
||||
|
||||
char*
|
||||
kmap(KeySym k, uint state)
|
||||
{
|
||||
Key *kp;
|
||||
int i;
|
||||
|
||||
/* Check for mapped keys out of X11 function keys. */
|
||||
for (i = 0; i < mappedkeyslen; i++) {
|
||||
if (mappedkeys[i] == k)
|
||||
break;
|
||||
}
|
||||
if (i == mappedkeyslen) {
|
||||
if ((k & 0xFFFF) < 0xFD00)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (kp = key; kp < key + keyslen; kp++) {
|
||||
if (kp->k != k)
|
||||
continue;
|
||||
|
||||
if (!match(kp->mask, state))
|
||||
continue;
|
||||
|
||||
if (IS_SET(MODE_APPKEYPAD) ? kp->appkey < 0 : kp->appkey > 0)
|
||||
continue;
|
||||
if (term.numlock && kp->appkey == 2)
|
||||
continue;
|
||||
|
||||
if (IS_SET(MODE_APPCURSOR) ? kp->appcursor < 0 : kp->appcursor > 0)
|
||||
continue;
|
||||
|
||||
if (IS_SET(MODE_CRLF) ? kp->crlf < 0 : kp->crlf > 0)
|
||||
continue;
|
||||
|
||||
return kp->s;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
kpress(XEvent *ev)
|
||||
{
|
||||
|
Reference in New Issue
Block a user