Simplify Mod1 logic in kpress(), eliminating locals and a memcpy.

dev
Mark Edgar 2013-10-05 11:45:17 +02:00 committed by Roberto E. Vargas Caballero
parent 7a4eefe87c
commit 02ae3ce6fd
1 changed files with 10 additions and 13 deletions

23
st.c
View File

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