treverted back to the old Key struct. - st - [fork] customized build of st, the… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 0a5e5102096d65a3ba8e39ea9b9b0eb89fe30e04 | |
parent 4d794b3479cc586de7796d9b060b2eb469a6500d | |
Author: Aurélien Aptel <[email protected]> | |
Date: Sun, 21 Jun 2009 19:52:06 +0200 | |
reverted back to the old Key struct. | |
Diffstat: | |
M config.h | 21 +++++++++++---------- | |
M st.c | 20 +++++++++++++++++--- | |
2 files changed, 28 insertions(+), 13 deletions(-) | |
--- | |
diff --git a/config.h b/config.h | |
t@@ -24,15 +24,16 @@ static char* colorname[] = { | |
#define DefaultCS 1 | |
#define BellCol DefaultFG | |
+ | |
/* special keys */ | |
-static 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@@ -40,11 +40,14 @@ enum { CRset=1, CRupdate=2 }; | |
enum { TMwrap=1, TMinsert=2 }; | |
enum { SCupdate, SCredraw }; | |
-#include "config.h" | |
- | |
typedef int Color; | |
typedef struct { | |
+ KeySym k; | |
+ char s[ESCSIZ]; | |
+} Key; | |
+ | |
+typedef struct { | |
char c; /* character code */ | |
char mode; /* attribute flags */ | |
Color fg; /* foreground */ | |
t@@ -95,6 +98,8 @@ typedef struct { | |
int cw; /* char width */ | |
} XWindow; | |
+#include "config.h" | |
+ | |
/* Drawing Context */ | |
typedef struct { | |
unsigned long col[LEN(colorname)]; | |
t@@ -992,6 +997,15 @@ draw(int redraw_all) { | |
xcursor(CSdraw); | |
} | |
+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(XKeyEvent *e) { | |
KeySym ksym; | |
t@@ -1004,7 +1018,7 @@ kpress(XKeyEvent *e) { | |
meta = e->state & Mod1Mask; | |
shift = e->state & ShiftMask; | |
len = XLookupString(e, buf, sizeof(buf), &ksym, NULL); | |
- if(skmap = key[ksym]) | |
+ if(skmap = kmap(ksym)) | |
ttywrite(skmap, strlen(skmap)); | |
else if(len > 0) { | |
buf[sizeof(buf)-1] = '\0'; |