aboutsummaryrefslogtreecommitdiff
path: root/st.c
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 /st.c
parentb596d6ba3c50bc379adc298a4e2ba7c122b116ab (diff)
downloadst-2bd6afd1c9eb341d9e2c5d89bc16bb7758691e1f.tar.gz
st-2bd6afd1c9eb341d9e2c5d89bc16bb7758691e1f.zip
Implementing 8 bit mode for meta.
Diffstat (limited to 'st.c')
-rw-r--r--st.c23
1 files changed, 19 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;