|
|
|
@ -3563,8 +3563,8 @@ void |
|
|
|
|
kpress(XEvent *ev) { |
|
|
|
|
XKeyEvent *e = &ev->xkey; |
|
|
|
|
KeySym ksym; |
|
|
|
|
char xstr[31], buf[32], *customkey, *cp = buf; |
|
|
|
|
int len, ret; |
|
|
|
|
char buf[32], *customkey; |
|
|
|
|
int len; |
|
|
|
|
long c; |
|
|
|
|
Status status; |
|
|
|
|
Shortcut *bp; |
|
|
|
@ -3572,7 +3572,7 @@ kpress(XEvent *ev) { |
|
|
|
|
if(IS_SET(MODE_KBDLOCK)) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
len = XmbLookupString(xw.xic, e, xstr, sizeof(xstr), &ksym, &status); |
|
|
|
|
len = XmbLookupString(xw.xic, e, buf, sizeof buf, &ksym, &status); |
|
|
|
|
e->state &= ~Mod2Mask; |
|
|
|
|
/* 1. shortcuts */ |
|
|
|
|
for(bp = shortcuts; bp < shortcuts + LEN(shortcuts); bp++) { |
|
|
|
@ -3586,26 +3586,23 @@ kpress(XEvent *ev) { |
|
|
|
|
if((customkey = kmap(ksym, e->state))) { |
|
|
|
|
len = strlen(customkey); |
|
|
|
|
memcpy(buf, customkey, len); |
|
|
|
|
/* 3. hardcoded (overrides X lookup) */ |
|
|
|
|
/* 3. composed string from input method */ |
|
|
|
|
} else { |
|
|
|
|
if(len == 0) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
if(len == 1 && e->state & Mod1Mask) { |
|
|
|
|
if(IS_SET(MODE_8BIT)) { |
|
|
|
|
if(*xstr < 0177) { |
|
|
|
|
c = *xstr | 0x80; |
|
|
|
|
ret = utf8encode(&c, cp); |
|
|
|
|
cp += ret; |
|
|
|
|
len = 0; |
|
|
|
|
if(*buf < 0177) { |
|
|
|
|
c = *buf | 0x80; |
|
|
|
|
len = utf8encode(&c, buf); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
*cp++ = '\033'; |
|
|
|
|
buf[1] = buf[0]; |
|
|
|
|
buf[0] = '\033'; |
|
|
|
|
len = 2; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
memcpy(cp, xstr, len); |
|
|
|
|
len = cp - buf + len; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ttywrite(buf, len); |
|
|
|
|