st

fork of suckless's simple terminal
Index Commits Files Refs README LICENSE
commit 02ae3ce6fdc178ca6eb9b10b6447bb56a6513a27
parent 7a4eefe87cb7661c8a77286d05b6c3afb467f806
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:
Mst.c | 23++++++++++-------------
1 file changed, 10 insertions(+), 13 deletions(-)
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);