tMove key-matching functions into x.c - st - [fork] customized build of st, the… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit ed132e11271d18a5d8aa163096bc6192c694bc47 | |
parent dbe8676d7d69651132bde2b6d9ec3787cbbc552a | |
Author: Devin J. Pohly <[email protected]> | |
Date: Wed, 11 Oct 2017 08:47:14 -0500 | |
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 <[email protected]> | |
Diffstat: | |
M config.def.h | 6 +++--- | |
M st.c | 58 ++---------------------------… | |
M st.h | 18 +++++++++++++++--- | |
M x.c | 48 +++++++++++++++++++++++++++++… | |
4 files changed, 68 insertions(+), 62 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
t@@ -209,13 +209,13 @@ Shortcut shortcuts[] = { | |
* If you want keys other than the X11 function keys (0xFD00 - 0xFFFF) | |
* to be mapped below, add them to this array. | |
*/ | |
-static KeySym mappedkeys[] = { -1 }; | |
+KeySym mappedkeys[] = { -1 }; | |
/* | |
* State bits to ignore when matching key or button events. By default, | |
* numlock (Mod2Mask) and keyboard layout (XK_SWITCH_MOD) are ignored. | |
*/ | |
-static uint ignoremod = Mod2Mask|XK_SWITCH_MOD; | |
+uint ignoremod = Mod2Mask|XK_SWITCH_MOD; | |
/* | |
* Override mouse-select while mask is active (when MODE_MOUSE is set). | |
t@@ -228,7 +228,7 @@ uint forceselmod = ShiftMask; | |
* This is the huge key array which defines all compatibility to the Linux | |
* world. Please decide about changes wisely. | |
*/ | |
-static Key key[] = { | |
+Key key[] = { | |
/* keysym mask string appkey appcursor crlf … | |
{ XK_KP_Home, ShiftMask, "\033[2J", 0, -1, 0}, | |
{ XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1, 0}, | |
diff --git a/st.c b/st.c | |
t@@ -110,16 +110,6 @@ typedef struct { | |
int narg; /* nb of args */ | |
} STREscape; | |
-typedef struct { | |
- KeySym k; | |
- uint mask; | |
- char *s; | |
- /* three valued logic variables: 0 indifferent, 1 on, -1 off */ | |
- signed char appkey; /* application keypad */ | |
- signed char appcursor; /* application cursor */ | |
- signed char crlf; /* crlf mode */ | |
-} Key; | |
- | |
/* function definitions used in config.h */ | |
static void clipcopy(const Arg *); | |
static void clippaste(const Arg *); | |
t@@ -223,6 +213,8 @@ 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); | |
ssize_t | |
xwrite(int fd, const char *s, size_t len) | |
t@@ -2550,54 +2542,8 @@ redraw(void) | |
draw(); | |
} | |
-int | |
-match(uint mask, uint state) | |
-{ | |
- return mask == XK_ANY_MOD || mask == (state & ~ignoremod); | |
-} | |
- | |
void | |
numlock(const Arg *dummy) | |
{ | |
term.numlock ^= 1; | |
} | |
- | |
-char* | |
-kmap(KeySym k, uint state) | |
-{ | |
- Key *kp; | |
- int i; | |
- | |
- /* Check for mapped keys out of X11 function keys. */ | |
- for (i = 0; i < LEN(mappedkeys); i++) { | |
- if (mappedkeys[i] == k) | |
- break; | |
- } | |
- if (i == LEN(mappedkeys)) { | |
- if ((k & 0xFFFF) < 0xFD00) | |
- return NULL; | |
- } | |
- | |
- for (kp = key; kp < key + LEN(key); 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… | |
- continue; | |
- | |
- if (IS_SET(MODE_CRLF) ? kp->crlf < 0 : kp->crlf > 0) | |
- continue; | |
- | |
- return kp->s; | |
- } | |
- | |
- return NULL; | |
-} | |
diff --git a/st.h b/st.h | |
t@@ -176,6 +176,16 @@ typedef struct { | |
const Arg arg; | |
} Shortcut; | |
+typedef struct { | |
+ KeySym k; | |
+ uint mask; | |
+ char *s; | |
+ /* three valued logic variables: 0 indifferent, 1 on, -1 off */ | |
+ signed char appkey; /* application keypad */ | |
+ signed char appcursor; /* application cursor */ | |
+ signed char crlf; /* crlf mode */ | |
+} Key; | |
+ | |
void die(const char *, ...); | |
void redraw(void); | |
t@@ -184,7 +194,6 @@ void tnew(int, int); | |
void tresize(int, int); | |
void tsetdirt(int, int); | |
void tsetdirtattr(int); | |
-int match(uint, uint); | |
void ttynew(void); | |
size_t ttyread(void); | |
void ttyresize(int, int); | |
t@@ -193,9 +202,7 @@ void ttywrite(const char *, size_t); | |
void resettitle(void); | |
-char *kmap(KeySym, uint); | |
void selclear(void); | |
- | |
void selinit(void); | |
void selnormalize(void); | |
int selected(int, int); | |
t@@ -255,7 +262,12 @@ extern MouseShortcut mshortcuts[]; | |
extern size_t mshortcutslen; | |
extern Shortcut shortcuts[]; | |
extern size_t shortcutslen; | |
+extern KeySym mappedkeys[]; | |
+extern size_t mappedkeyslen; | |
+extern uint ignoremod; | |
extern uint forceselmod; | |
+extern Key key[]; | |
+extern size_t keyslen; | |
extern uint selmasks[]; | |
extern size_t selmaskslen; | |
extern char ascii_printable[]; | |
diff --git a/x.c b/x.c | |
t@@ -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); | |
t@@ -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… | |
+ continue; | |
+ | |
+ if (IS_SET(MODE_CRLF) ? kp->crlf < 0 : kp->crlf > 0) | |
+ continue; | |
+ | |
+ return kp->s; | |
+ } | |
+ | |
+ return NULL; | |
+} | |
+ | |
void | |
kpress(XEvent *ev) | |
{ |