diff --git a/config.def.h b/config.def.h index d1c20bd..ed19d04 100644 --- a/config.def.h +++ b/config.def.h @@ -13,6 +13,9 @@ static char shell[] = "/bin/sh"; static unsigned int doubleclicktimeout = 300; static unsigned int tripleclicktimeout = 600; +/* 8bit meta */ +static bool meta8 = true; + /* alt screens */ static bool allowaltscreen = true; diff --git a/st.c b/st.c index 71e5b83..3a87f0a 100644 --- a/st.c +++ b/st.c @@ -3228,7 +3228,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; @@ -3254,8 +3255,18 @@ kpress(XEvent *ev) { if(len == 0) return; - if(len == 1 && e->state & Mod1Mask) - *cp++ = '\033'; + if(len == 1 && e->state & Mod1Mask) { + if(meta8) { + 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; @@ -3380,6 +3391,9 @@ main(int argc, char *argv[]) { xw.isfixed = False; ARGBEGIN { + case '8': + meta8 = false; + break; case 'a': allowaltscreen = false; break;