about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Src/Zle/complist.c17
2 files changed, 17 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index cb35290b4..f63ffa6fa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2016-10-23  Peter Stephenson  <p.w.stephenson@ntlworld.com>
+
+	* 39715: Src/Zle/complist.c: handle multibyte characters when
+	highlighting completion listing.
+
 2016-10-22  Barton E. Schaefer  <schaefer@zsh.org>
 
 	* 39710 (cf. Alex George: 39709): Completion/Base/Completer/_expand,
diff --git a/Src/Zle/complist.c b/Src/Zle/complist.c
index 8aeb6c3b8..39ac782eb 100644
--- a/Src/Zle/complist.c
+++ b/Src/Zle/complist.c
@@ -662,7 +662,9 @@ clprintfmt(char *p, int ml)
 
     initiscol();
 
-    for (; *p; p++) {
+    while (*p) {
+	convchar_t chr;
+	int chrlen = MB_METACHARLENCONV(p, &chr);
 	doiscol(i++);
 	cc++;
 	if (*p == '\n') {
@@ -673,11 +675,16 @@ clprintfmt(char *p, int ml)
 	if (ml == mlend - 1 && (cc % zterm_columns) == zterm_columns - 1)
 	    return 0;
 
-	if (*p == Meta) {
+	while (chrlen) {
+	    if (*p == Meta) {
+		p++;
+		chrlen--;
+		putc(*p ^ 32, shout);
+	    } else
+		putc(*p, shout);
+	    chrlen--;
 	    p++;
-	    putc(*p ^ 32, shout);
-	} else
-	    putc(*p, shout);
+	}
 	if ((beg = !(cc % zterm_columns)))
 	    ml++;
 	if (mscroll && !(cc % zterm_columns) &&