diff options
Diffstat (limited to 'st.c')
| -rw-r--r-- | st.c | 20 |
1 files changed, 17 insertions, 3 deletions
| @@ -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'; |
