summaryrefslogtreecommitdiff
path: root/Src
diff options
context:
space:
mode:
Diffstat (limited to 'Src')
-rw-r--r--Src/math.c16
-rw-r--r--Src/utils.c11
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