diff options
author | Bart Schaefer <schaefer@zsh.org> | 2025-01-03 09:18:23 -0800 |
---|---|---|
committer | Bart Schaefer <schaefer@zsh.org> | 2025-01-03 09:18:23 -0800 |
commit | 263659acb73d0222e641dfd8d37e48e96582de02 (patch) | |
tree | dafc5201f543a076d1c7ba2fce78ea5b84d1d6fc /Src | |
parent | 3f43a2ffd1cfff92ed4627b75d84fbfc1b9abbbc (diff) | |
download | zsh-263659acb73d0222e641dfd8d37e48e96582de02.tar.gz zsh-263659acb73d0222e641dfd8d37e48e96582de02.zip |
53294: fix multibyte handling in "select" prompts
Diffstat (limited to 'Src')
-rw-r--r-- | Src/loop.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/Src/loop.c b/Src/loop.c index 84dc66476..979285abc 100644 --- a/Src/loop.c +++ b/Src/loop.c @@ -351,9 +351,16 @@ selectlist(LinkList l, size_t start) zleentry(ZLE_CMD_TRASH); arr = hlinklist2array(l, 0); - for (ap = arr; *ap; ap++) - if (strlen(*ap) > longest) - longest = strlen(*ap); + for (ap = arr; *ap; ap++) { +#ifdef MB_METASTRWIDTH + int aplen = MB_METASTRWIDTH(*ap); +#else + int aplen = 0; + (void) unmetafy(*ap, &aplen); +#endif + if (aplen > longest) + longest = aplen; + } t0 = ct = ap - arr; longest++; while (t0) @@ -368,7 +375,12 @@ selectlist(LinkList l, size_t start) for (t1 = start; t1 != colsz && t1 - start < zterm_lines - 2; t1++) { ap = arr + t1; do { +#ifdef MB_METASTRWIDTH + size_t t2 = MB_METASTRWIDTH(*ap) + 2; + (void) unmetafy(*ap, NULL); +#else size_t t2 = strlen(*ap) + 2; +#endif int t3; fprintf(stderr, "%d) %s", t3 = ap - arr + 1, *ap); |