diff options
Diffstat (limited to 'Src')
-rw-r--r-- | Src/math.c | 16 | ||||
-rw-r--r-- | Src/utils.c | 11 |
2 files changed, 25 insertions, 2 deletions
diff --git a/Src/math.c b/Src/math.c index 336416597..bd48288ec 100644 --- a/Src/math.c +++ b/Src/math.c @@ -549,8 +549,20 @@ getcvar(char *s) queue_signals(); if (!(t = getsparam(s))) mn.u.l = 0; - else - mn.u.l = STOUC(*t == Meta ? t[1] ^ 32 : *t); + else { +#ifdef MULTIBYTE_SUPPORT + if (isset(MULTIBYTE)) { + wint_t wc; + (void)mb_metacharlenconv(t, &wc); + if (wc != WEOF) { + mn.u.l = (zlong)wc; + unqueue_signals(); + return mn; + } + } +#endif + mn.u.l = STOUC(*t == Meta ? t[1] ^ 32 : *t); + } unqueue_signals(); return mn; } diff --git a/Src/utils.c b/Src/utils.c index 32f6ae336..75a736596 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -4410,6 +4410,17 @@ getkeystring(char *s, int *len, int fromwhere, int *misc) (fromwhere == 2 || fromwhere == 5 || fromwhere == 6)) { control = 1; continue; +#ifdef MULTIBYTE_SUPPORT + } else if (fromwhere == 6 && isset(MULTIBYTE) && STOUC(*s) > 127) { + wint_t wc; + int len; + len = mb_metacharlenconv(s, &wc); + if (wc != WEOF) { + *misc = (int)wc; + return s + len; + } +#endif + } else if (*s == Meta) *t++ = *++s ^ 32; else |