[hackers] [st] Implementing 8 bit mode for meta. || Christoph Lohmann

From: <git_AT_suckless.org>
Date: Tue, 23 Apr 2013 15:24:15 +0200

commit 2bd6afd1c9eb341d9e2c5d89bc16bb7758691e1f
Author: Christoph Lohmann <20h_AT_r-36.net>
Date: Tue Apr 23 15:22:14 2013 +0200

    Implementing 8 bit mode for meta.

diff --git a/st.c b/st.c
index 71e5b83..f593302 100644
--- a/st.c
+++ b/st.c
_AT_@ -114,6 +114,7 @@ enum term_mode {
         MODE_ECHO = 1024,
         MODE_APPCURSOR = 2048,
         MODE_MOUSESGR = 4096,
+ MODE_8BIT = 8192,
 };
 
 enum escape_state {
_AT_@ -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:
_AT_@ -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;
 
_AT_@ -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++ = '';
+ 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++ = '';
+ }
+ }
 
                 memcpy(cp, xstr, len);
                 len = cp - buf + len;
diff --git a/st.info b/st.info
index 1c83dc1..26db8cc 100644
--- a/st.info
+++ b/st.info
_AT_@ -147,6 +147,7 @@ st| simpleterm,
         kich1=\E[2~,
         knp=\E[6~,
         kmous=\E[M,
+ km,
         kpp=\E[5~,
         lines#24,
         mir,
_AT_@ -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,
_AT_@ -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,
Received on Tue Apr 23 2013 - 15:24:15 CEST

This archive was generated by hypermail 2.3.0 : Tue Apr 23 2013 - 15:36:10 CEST