aboutsummaryrefslogtreecommitdiff
path: root/st.c
diff options
context:
space:
mode:
Diffstat (limited to 'st.c')
-rw-r--r--st.c20
1 files changed, 17 insertions, 3 deletions
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';