summaryrefslogtreecommitdiff
path: root/Src/Zle/zle_tricky.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2006-08-20 22:28:17 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2006-08-20 22:28:17 +0000
commit754503c60d7323a7456f4458da9d80138d32b4ba (patch)
treeba7c0d6d0cfe27ee16716613b2dbb2bcaec9678f /Src/Zle/zle_tricky.c
parent1217d5a66d2e84372af577165568e5911868aa6b (diff)
downloadzsh-754503c60d7323a7456f4458da9d80138d32b4ba.tar.gz
zsh-754503c60d7323a7456f4458da9d80138d32b4ba.zip
22651: failed to unmetafy bytes for output
Diffstat (limited to 'Src/Zle/zle_tricky.c')
-rw-r--r--Src/Zle/zle_tricky.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/Src/Zle/zle_tricky.c b/Src/Zle/zle_tricky.c
index b25dea6e7..0983bec31 100644
--- a/Src/Zle/zle_tricky.c
+++ b/Src/Zle/zle_tricky.c
@@ -2123,9 +2123,15 @@ printfmt(char *fmt, int n, int dopr, int doesc)
tcout(TCUNDERLINEEND);
break;
case '{':
- for (p++; *p && (*p != '%' || p[1] != '}'); p++)
- if (dopr)
+ for (p++; *p && (*p != '%' || p[1] != '}'); p++) {
+ if (*p == Meta) {
+ p++;
+ if (dopr)
+ putc(*p ^ 32, shout);
+ }
+ else if (dopr)
putc(*p, shout);
+ }
if (*p)
p++;
else
@@ -2164,8 +2170,14 @@ printfmt(char *fmt, int n, int dopr, int doesc)
convchar_t cchar;
int clen = MB_METACHARLENCONV(p, &cchar);
if (dopr) {
- while (clen--)
- putc(*p++, shout);
+ while (clen--) {
+ if (*p == Meta) {
+ p++;
+ clen--;
+ putc(*p++ ^ 32, shout);
+ } else
+ putc(*p++, shout);
+ }
} else
p += clen;
cc += WCWIDTH(cchar);