Move config.h include from st.c to x.c
[st.git] / x.c
diff --git a/x.c b/x.c
index 1b656ac..cb8c351 100644 (file)
--- a/x.c
+++ b/x.c
@@ -20,6 +20,25 @@ static char *argv0;
 #include "st.h"
 #include "win.h"
 
+/* function definitions used in config.h */
+static void clipcopy(const Arg *);
+static void clippaste(const Arg *);
+static void selpaste(const Arg *);
+static void zoom(const Arg *);
+static void zoomabs(const Arg *);
+static void zoomreset(const Arg *);
+
+/* config.h for applying patches and the configuration. */
+#include "config.h"
+
+/* config.h array lengths */
+size_t colornamelen = LEN(colorname);
+size_t mshortcutslen = LEN(mshortcuts);
+size_t shortcutslen = LEN(shortcuts);
+size_t selmaskslen = LEN(selmasks);
+size_t keyslen = LEN(key);
+size_t mappedkeyslen = LEN(mappedkeys);
+
 /* XEMBED messages */
 #define XEMBED_FOCUS_IN  4
 #define XEMBED_FOCUS_OUT 5
@@ -116,6 +135,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);
@@ -177,6 +198,33 @@ static char *usedfont = NULL;
 static double usedfontsize = 0;
 static double defaultfontsize = 0;
 
+static char *opt_class = NULL;
+static char **opt_cmd  = NULL;
+static char *opt_embed = NULL;
+static char *opt_font  = NULL;
+static char *opt_io    = NULL;
+static char *opt_line  = NULL;
+static char *opt_name  = NULL;
+static char *opt_title = NULL;
+
+void
+clipcopy(const Arg *dummy)
+{
+       xclipcopy();
+}
+
+void
+clippaste(const Arg *dummy)
+{
+       xclippaste();
+}
+
+void
+selpaste(const Arg *dummy)
+{
+       xselpaste();
+}
+
 void
 zoom(const Arg *arg)
 {
@@ -1471,6 +1519,7 @@ void
 xsettitle(char *p)
 {
        XTextProperty prop;
+       DEFAULT(p, "st");
 
        Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle,
                        &prop);
@@ -1603,6 +1652,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)
 {
@@ -1709,7 +1804,7 @@ run(void)
        } while (ev.type != MapNotify);
 
        cresize(w, h);
-       ttynew();
+       ttynew(opt_line, opt_io, opt_cmd);
        ttyresize(win.tw, win.th);
 
        clock_gettime(CLOCK_MONOTONIC, &last);