diff options
-rw-r--r-- | config.h | 21 | ||||
-rw-r--r-- | st.c | 20 |
2 files changed, 28 insertions, 13 deletions
@@ -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 */ |
28 | static char* key[] = { | 29 | static 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 | }; |
@@ -40,11 +40,14 @@ enum { CRset=1, CRupdate=2 }; | |||
40 | enum { TMwrap=1, TMinsert=2 }; | 40 | enum { TMwrap=1, TMinsert=2 }; |
41 | enum { SCupdate, SCredraw }; | 41 | enum { SCupdate, SCredraw }; |
42 | 42 | ||
43 | #include "config.h" | ||
44 | |||
45 | typedef int Color; | 43 | typedef int Color; |
46 | 44 | ||
47 | typedef struct { | 45 | typedef struct { |
46 | KeySym k; | ||
47 | char s[ESCSIZ]; | ||
48 | } Key; | ||
49 | |||
50 | typedef 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 */ |
99 | typedef struct { | 104 | typedef 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 | ||
1000 | char* | ||
1001 | kmap(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 | |||
995 | void | 1009 | void |
996 | kpress(XKeyEvent *e) { | 1010 | kpress(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'; |