Introduction
Introduction Statistics Contact Development Disclaimer Help
tFixed possible segfault by reverting to the key struct (again). - st - [fork] …
git clone git://src.adamsgaard.dk/st
Log
Files
Refs
README
LICENSE
---
commit 4e6915a16b75c1e79142e15a9b23e761140d4e9b
parent dab8326e6428a5db6b7a6e08f40fa1e5ac77bc6f
Author: AurĂ©lien Aptel <[email protected]>
Date: Mon, 7 Sep 2009 21:19:29 +0200
Fixed possible segfault by reverting to the key struct (again).
Diffstat:
M config.h | 21 ++++++++++-----------
M st.c | 21 +++++++++++++++++++--
2 files changed, 29 insertions(+), 13 deletions(-)
---
diff --git a/config.h b/config.h
t@@ -24,16 +24,15 @@ static const char *colorname[] = {
#define DefaultCS 1
#define BellCol DefaultFG
-
/* special keys */
-static const char *key[] = {
- [XK_Delete] = "\033[3~",
- [XK_Home] = "\033[1~",
- [XK_End] = "\033[4~",
- [XK_Prior] = "\033[5~",
- [XK_Next] = "\033[6~",
- [XK_Left] = "\033[D",
- [XK_Right] = "\033[C",
- [XK_Up] = "\033[A",
- [XK_Down] = "\033[B",
+static Key key[] = {
+ { XK_Delete, "\033[3~" },
+ { XK_Home, "\033[1~" },
+ { XK_End, "\033[4~" },
+ { XK_Prior, "\033[5~" },
+ { XK_Next, "\033[6~" },
+ { XK_Left, "\033[D" },
+ { XK_Right, "\033[C" },
+ { XK_Up, "\033[A" },
+ { XK_Down, "\033[B" },
};
diff --git a/st.c b/st.c
t@@ -93,6 +93,11 @@ typedef struct {
int cw; /* char width */
} XWindow;
+typedef struct {
+ KeySym k;
+ char s[ESCSIZ];
+} Key;
+
#include "config.h"
/* Drawing Context */
t@@ -146,6 +151,7 @@ static void xinit(void);
static void xscroll(void);
static void expose(XEvent *);
+static char * kmap(KeySym);
static void kpress(XEvent *);
static void resize(XEvent *);
t@@ -1005,11 +1011,21 @@ expose(XEvent *ev) {
draw(SCredraw);
}
+char *
+kmap(KeySym k) {
+ int i;
+ for(i = 0; i < LEN(key); i++)
+ if(key[i].k == k)
+ return (char*)key[i].s;
+ return NULL;
+}
+
void
kpress(XEvent *ev) {
XKeyEvent *e = &ev->xkey;
KeySym ksym;
char buf[32];
+ char *customkey;
int len;
int meta;
int shift;
t@@ -1017,8 +1033,9 @@ kpress(XEvent *ev) {
meta = e->state & Mod1Mask;
shift = e->state & ShiftMask;
len = XLookupString(e, buf, sizeof(buf), &ksym, NULL);
- if(key[ksym])
- ttywrite(key[ksym], strlen(key[ksym]));
+
+ if(customkey = kmap(ksym))
+ ttywrite(customkey, strlen(customkey));
else if(len > 0) {
buf[sizeof(buf)-1] = '\0';
if(meta && len == 1)
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.