diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Src/Zle/complist.c | 17 |
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) && |