Move key-matching functions into x.c
[st.git] / x.c
diff --git a/x.c b/x.c
index 01ef1b0..371a467 100644 (file)
--- a/x.c
+++ b/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);
@@ -192,7 +194,7 @@ zoomabs(const Arg *arg)
        xunloadfonts();
        xloadfonts(usedfont, arg->f);
        cresize(0, 0);
-       ttyresize();
+       ttyresize(win.tw, win.th);
        redraw();
        xhints();
 }
@@ -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)
 {
@@ -1679,7 +1727,7 @@ resize(XEvent *e)
                return;
 
        cresize(e->xconfigure.width, e->xconfigure.height);
-       ttyresize();
+       ttyresize(win.tw, win.th);
 }
 
 void
@@ -1710,7 +1758,7 @@ run(void)
 
        cresize(w, h);
        ttynew();
-       ttyresize();
+       ttyresize(win.tw, win.th);
 
        clock_gettime(CLOCK_MONOTONIC, &last);
        lastblink = last;