st

fork of suckless's simple terminal
Index Commits Files Refs README LICENSE
commit 2bd6afd1c9eb341d9e2c5d89bc16bb7758691e1f
parent b596d6ba3c50bc379adc298a4e2ba7c122b116ab
Author: Christoph Lohmann <20h@r-36.net>
Date:   Tue, 23 Apr 2013 15:22:14 +0200

Implementing 8 bit mode for meta.

Diffstat:
Mst.c | 23+++++++++++++++++++----
Mst.info | 3+++
2 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/st.c b/st.c
@@ -114,6 +114,7 @@ enum term_mode {
     MODE_ECHO     = 1024,
     MODE_APPCURSOR     = 2048,
     MODE_MOUSESGR    = 4096,
+    MODE_8BIT     = 8192,
 };
 
 enum escape_state {
@@ -1650,6 +1651,9 @@ tsetmode(bool priv, bool set, int *args, int narg) {
             case 1006:
                 MODBIT(term.mode, set, MODE_MOUSESGR);
                 break;
+            case 1034:
+                MODBIT(term.mode, set, MODE_8BIT);
+                break;
             case 1049: /* = 1047 and 1048 */
             case 47:
             case 1047:
@@ -3228,7 +3232,8 @@ kpress(XEvent *ev) {
     XKeyEvent *e = &ev->xkey;
     KeySym ksym;
     char xstr[31], buf[32], *customkey, *cp = buf;
-    int len;
+    int len, ret;
+    long c;
     Status status;
     Shortcut *bp;
 
@@ -3249,13 +3254,23 @@ kpress(XEvent *ev) {
     if((customkey = kmap(ksym, e->state))) {
         len = strlen(customkey);
         memcpy(buf, customkey, len);
-    /* 2. hardcoded (overrides X lookup) */
+    /* 3. hardcoded (overrides X lookup) */
     } else {
         if(len == 0)
             return;
 
-        if(len == 1 && e->state & Mod1Mask)
-            *cp++ = '\033';
+        if(len == 1 && e->state & Mod1Mask) {
+            if(IS_SET(MODE_8BIT)) {
+                if(*xstr < 0177) {
+                    c = *xstr | B7;
+                    ret = utf8encode(&c, cp);
+                    cp += ret;
+                    len = 0;
+                }
+            } else {
+                *cp++ = '\033';
+            }
+        }
 
         memcpy(cp, xstr, len);
         len = cp - buf + len;
diff --git a/st.info b/st.info
@@ -147,6 +147,7 @@ st| simpleterm,
     kich1=\E[2~,
     knp=\E[6~,
     kmous=\E[M,
+    km,
     kpp=\E[5~,
     lines#24,
     mir,
@@ -162,6 +163,7 @@ st| simpleterm,
     rmcup=\E[?1049l,
     rmir=\E[4l,
     rmkx=\E[?1l\E>,
+    rmm=\E[?1034l,
     rmso=\E[27m,
     rmul=\E[m,
     rs1=\Ec,
@@ -178,6 +180,7 @@ st| simpleterm,
     smcup=\E[?1049h,
     smir=\E[4h,
     smkx=\E[?1h\E=,
+    smm=\E[?1034h,
     smso=\E[7m,
     smul=\E[4m,
     tbc=\E[3g,