Simplify Mod1 logic in kpress(), eliminating locals and a memcpy. - st - Simple Terminal
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 02ae3ce6fdc178ca6eb9b10b6447bb56a6513a27
 (DIR) parent 7a4eefe87cb7661c8a77286d05b6c3afb467f806
 (HTM) Author: Mark Edgar <medgar123@gmail.com>
       Date:   Sat,  5 Oct 2013 11:45:17 +0200
       
       Simplify Mod1 logic in kpress(), eliminating locals and a memcpy.
       
       Diffstat:
         st.c                                |      23 ++++++++++-------------
       
       1 file changed, 10 insertions(+), 13 deletions(-)
       ---
 (DIR) diff --git a/st.c b/st.c
       @@ -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);