summaryrefslogtreecommitdiff
path: root/Src
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@zsh.org>2025-01-03 09:18:23 -0800
committerBart Schaefer <schaefer@zsh.org>2025-01-03 09:18:23 -0800
commit263659acb73d0222e641dfd8d37e48e96582de02 (patch)
treedafc5201f543a076d1c7ba2fce78ea5b84d1d6fc /Src
parent3f43a2ffd1cfff92ed4627b75d84fbfc1b9abbbc (diff)
downloadzsh-263659acb73d0222e641dfd8d37e48e96582de02.tar.gz
zsh-263659acb73d0222e641dfd8d37e48e96582de02.zip
53294: fix multibyte handling in "select" prompts
Diffstat (limited to 'Src')
-rw-r--r--Src/loop.c18
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);