aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Lohmann <20h@r-36.net>2013-04-23 15:22:14 +0200
committerChristoph Lohmann <20h@r-36.net>2013-04-23 15:22:14 +0200
commit2bd6afd1c9eb341d9e2c5d89bc16bb7758691e1f (patch)
treeb05dd112d8ed8c318fafdd6236c186bb650fc9b7
parentb596d6ba3c50bc379adc298a4e2ba7c122b116ab (diff)
downloadst-2bd6afd1c9eb341d9e2c5d89bc16bb7758691e1f.tar.gz
st-2bd6afd1c9eb341d9e2c5d89bc16bb7758691e1f.zip
Implementing 8 bit mode for meta.
-rw-r--r--st.c23
-rw-r--r--st.info3
2 files changed, 22 insertions, 4 deletions
diff --git a/st.c b/st.c
index 71e5b83..f593302 100644
--- a/st.c
+++ b/st.c
@@ -114,6 +114,7 @@ enum term_mode {
114 MODE_ECHO = 1024, 114 MODE_ECHO = 1024,
115 MODE_APPCURSOR = 2048, 115 MODE_APPCURSOR = 2048,
116 MODE_MOUSESGR = 4096, 116 MODE_MOUSESGR = 4096,
117 MODE_8BIT = 8192,
117}; 118};
118 119
119enum escape_state { 120enum escape_state {
@@ -1650,6 +1651,9 @@ tsetmode(bool priv, bool set, int *args, int narg) {
1650 case 1006: 1651 case 1006:
1651 MODBIT(term.mode, set, MODE_MOUSESGR); 1652 MODBIT(term.mode, set, MODE_MOUSESGR);
1652 break; 1653 break;
1654 case 1034:
1655 MODBIT(term.mode, set, MODE_8BIT);
1656 break;
1653 case 1049: /* = 1047 and 1048 */ 1657 case 1049: /* = 1047 and 1048 */
1654 case 47: 1658 case 47:
1655 case 1047: 1659 case 1047:
@@ -3228,7 +3232,8 @@ kpress(XEvent *ev) {
3228 XKeyEvent *e = &ev->xkey; 3232 XKeyEvent *e = &ev->xkey;
3229 KeySym ksym; 3233 KeySym ksym;
3230 char xstr[31], buf[32], *customkey, *cp = buf; 3234 char xstr[31], buf[32], *customkey, *cp = buf;
3231 int len; 3235 int len, ret;
3236 long c;
3232 Status status; 3237 Status status;
3233 Shortcut *bp; 3238 Shortcut *bp;
3234 3239
@@ -3249,13 +3254,23 @@ kpress(XEvent *ev) {
3249 if((customkey = kmap(ksym, e->state))) { 3254 if((customkey = kmap(ksym, e->state))) {
3250 len = strlen(customkey); 3255 len = strlen(customkey);
3251 memcpy(buf, customkey, len); 3256 memcpy(buf, customkey, len);
3252 /* 2. hardcoded (overrides X lookup) */ 3257 /* 3. hardcoded (overrides X lookup) */
3253 } else { 3258 } else {
3254 if(len == 0) 3259 if(len == 0)
3255 return; 3260 return;
3256 3261
3257 if(len == 1 && e->state & Mod1Mask) 3262 if(len == 1 && e->state & Mod1Mask) {
3258 *cp++ = '\033'; 3263 if(IS_SET(MODE_8BIT)) {
3264 if(*xstr < 0177) {
3265 c = *xstr | B7;
3266 ret = utf8encode(&c, cp);
3267 cp += ret;
3268 len = 0;
3269 }
3270 } else {
3271 *cp++ = '\033';
3272 }
3273 }
3259 3274
3260 memcpy(cp, xstr, len); 3275 memcpy(cp, xstr, len);
3261 len = cp - buf + len; 3276 len = cp - buf + len;
diff --git a/st.info b/st.info
index 1c83dc1..26db8cc 100644
--- a/st.info
+++ b/st.info
@@ -147,6 +147,7 @@ st| simpleterm,
147 kich1=\E[2~, 147 kich1=\E[2~,
148 knp=\E[6~, 148 knp=\E[6~,
149 kmous=\E[M, 149 kmous=\E[M,
150 km,
150 kpp=\E[5~, 151 kpp=\E[5~,
151 lines#24, 152 lines#24,
152 mir, 153 mir,
@@ -162,6 +163,7 @@ st| simpleterm,
162 rmcup=\E[?1049l, 163 rmcup=\E[?1049l,
163 rmir=\E[4l, 164 rmir=\E[4l,
164 rmkx=\E[?1l\E>, 165 rmkx=\E[?1l\E>,
166 rmm=\E[?1034l,
165 rmso=\E[27m, 167 rmso=\E[27m,
166 rmul=\E[m, 168 rmul=\E[m,
167 rs1=\Ec, 169 rs1=\Ec,
@@ -178,6 +180,7 @@ st| simpleterm,
178 smcup=\E[?1049h, 180 smcup=\E[?1049h,
179 smir=\E[4h, 181 smir=\E[4h,
180 smkx=\E[?1h\E=, 182 smkx=\E[?1h\E=,
183 smm=\E[?1034h,
181 smso=\E[7m, 184 smso=\E[7m,
182 smul=\E[4m, 185 smul=\E[4m,
183 tbc=\E[3g, 186 tbc=\E[3g,