typedef int Color;
-typedef struct {
- KeySym k;
- char s[ESCSIZ];
-} Key;
-
typedef struct {
char c; /* character code */
char mode; /* attribute flags */
int cw; /* char width */
} XWindow;
+typedef struct {
+ KeySym k;
+ char s[ESCSIZ];
+} Key;
+
#include "config.h"
/* Drawing Context */
static void tcursor(int);
static void tdeletechar(int);
static void tdeleteline(int);
-static void tdump(void);
static void tinsertblank(int);
static void tinsertblankline(int);
static void tmoveto(int, int);
static void xscroll(void);
static void expose(XEvent *);
+static char * kmap(KeySym);
static void kpress(XEvent *);
static void resize(XEvent *);
static pid_t pid;
static int running;
+#ifdef DEBUG
+void
+tdump(void) {
+ int row, col;
+ Glyph c;
+
+ for(row = 0; row < term.row; row++) {
+ for(col = 0; col < term.col; col++) {
+ if(col == term.c.x && row == term.c.y)
+ putchar('#');
+ else {
+ c = term.line[row][col];
+ putchar(c.state & CRset ? c.c : '.');
+ }
+ }
+ putchar('\n');
+ }
+}
+#endif
+
void
die(const char *errstr, ...) {
va_list ap;
tputc(*s++);
}
-void
-tdump(void) {
- int row, col;
- Glyph c;
-
- for(row = 0; row < term.row; row++) {
- for(col = 0; col < term.col; col++) {
- if(col == term.c.x && row == term.c.y)
- putchar('#');
- else {
- c = term.line[row][col];
- putchar(c.state & CRset ? c.c : '.');
- }
- }
- putchar('\n');
- }
-}
-
void
tresize(int col, int row) {
int i;
draw(SCredraw);
}
+char *
+kmap(KeySym k) {
+ int i;
+ for(i = 0; i < LEN(key); i++)
+ if(key[i].k == k)
+ return (char*)key[i].s;
+ return NULL;
+}
+
void
kpress(XEvent *ev) {
XKeyEvent *e = &ev->xkey;
KeySym ksym;
char buf[32];
+ char *customkey;
int len;
int meta;
int shift;
meta = e->state & Mod1Mask;
shift = e->state & ShiftMask;
len = XLookupString(e, buf, sizeof(buf), &ksym, NULL);
- if(key[ksym])
- ttywrite(key[ksym], strlen(key[ksym]));
+
+ if(customkey = kmap(ksym))
+ ttywrite(customkey, strlen(customkey));
else if(len > 0) {
buf[sizeof(buf)-1] = '\0';
if(meta && len == 1)