diff options
| author | Aurélien Aptel <aurelien.aptel@gmail.com> | 2009-06-21 19:52:06 +0200 |
|---|---|---|
| committer | Aurélien Aptel <aurelien.aptel@gmail.com> | 2009-06-21 19:52:06 +0200 |
| commit | 0a5e5102096d65a3ba8e39ea9b9b0eb89fe30e04 (patch) | |
| tree | 427ba08b80d8e6118e9fd061726c596ecd965c30 | |
| parent | 4d794b3479cc586de7796d9b060b2eb469a6500d (diff) | |
| download | st-0a5e5102096d65a3ba8e39ea9b9b0eb89fe30e04.tar.gz st-0a5e5102096d65a3ba8e39ea9b9b0eb89fe30e04.zip | |
reverted back to the old Key struct.
| -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'; |
