aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.h21
-rw-r--r--st.c20
2 files changed, 28 insertions, 13 deletions
diff --git a/config.h b/config.h
index b66985f..c01354d 100644
--- a/config.h
+++ b/config.h
@@ -24,15 +24,16 @@ static char* colorname[] = {
24#define DefaultCS 1 24#define DefaultCS 1
25#define BellCol DefaultFG 25#define BellCol DefaultFG
26 26
27
27/* special keys */ 28/* special keys */
28static char* key[] = { 29static Key key[] = {
29 [XK_Delete] = "\033[3~", 30 { XK_Delete, "\033[3~" },
30 [XK_Home] = "\033[1~", 31 { XK_Home, "\033[1~" },
31 [XK_End] = "\033[4~", 32 { XK_End, "\033[4~" },
32 [XK_Prior] = "\033[5~", 33 { XK_Prior, "\033[5~" },
33 [XK_Next] = "\033[6~", 34 { XK_Next, "\033[6~" },
34 [XK_Left] = "\033[D", 35 { XK_Left, "\033[D" },
35 [XK_Right] = "\033[C", 36 { XK_Right, "\033[C" },
36 [XK_Up] = "\033[A", 37 { XK_Up, "\033[A" },
37 [XK_Down] = "\033[B", 38 { XK_Down, "\033[B" },
38}; 39};
diff --git a/st.c b/st.c
index 833805f..a7f957b 100644
--- a/st.c
+++ b/st.c
@@ -40,11 +40,14 @@ enum { CRset=1, CRupdate=2 };
40enum { TMwrap=1, TMinsert=2 }; 40enum { TMwrap=1, TMinsert=2 };
41enum { SCupdate, SCredraw }; 41enum { SCupdate, SCredraw };
42 42
43#include "config.h"
44
45typedef int Color; 43typedef int Color;
46 44
47typedef struct { 45typedef struct {
46 KeySym k;
47 char s[ESCSIZ];
48} Key;
49
50typedef struct {
48 char c; /* character code */ 51 char c; /* character code */
49 char mode; /* attribute flags */ 52 char mode; /* attribute flags */
50 Color fg; /* foreground */ 53 Color fg; /* foreground */
@@ -95,6 +98,8 @@ typedef struct {
95 int cw; /* char width */ 98 int cw; /* char width */
96} XWindow; 99} XWindow;
97 100
101#include "config.h"
102
98/* Drawing Context */ 103/* Drawing Context */
99typedef struct { 104typedef struct {
100 unsigned long col[LEN(colorname)]; 105 unsigned long col[LEN(colorname)];
@@ -992,6 +997,15 @@ draw(int redraw_all) {
992 xcursor(CSdraw); 997 xcursor(CSdraw);
993} 998}
994 999
1000char*
1001kmap(KeySym k) {
1002 int i;
1003 for(i = 0; i < LEN(key); i++)
1004 if(key[i].k == k)
1005 return (char*)key[i].s;
1006 return NULL;
1007}
1008
995void 1009void
996kpress(XKeyEvent *e) { 1010kpress(XKeyEvent *e) {
997 KeySym ksym; 1011 KeySym ksym;
@@ -1004,7 +1018,7 @@ kpress(XKeyEvent *e) {
1004 meta = e->state & Mod1Mask; 1018 meta = e->state & Mod1Mask;
1005 shift = e->state & ShiftMask; 1019 shift = e->state & ShiftMask;
1006 len = XLookupString(e, buf, sizeof(buf), &ksym, NULL); 1020 len = XLookupString(e, buf, sizeof(buf), &ksym, NULL);
1007 if(skmap = key[ksym]) 1021 if(skmap = kmap(ksym))
1008 ttywrite(skmap, strlen(skmap)); 1022 ttywrite(skmap, strlen(skmap));
1009 else if(len > 0) { 1023 else if(len > 0) {
1010 buf[sizeof(buf)-1] = '\0'; 1024 buf[sizeof(buf)-1] = '\0';