summaryrefslogtreecommitdiff
path: root/Src/utils.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2006-08-11 21:30:38 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2006-08-11 21:30:38 +0000
commit2ccad2310ef04e5dff8a3717182cb7b065553185 (patch)
tree4a044bf7e5be5a1ac94d75e94e9a1b00ca3598e3 /Src/utils.c
parent36c7a0a0b351c6a1d3cc51f7947e4c929e2f8aa8 (diff)
downloadzsh-2ccad2310ef04e5dff8a3717182cb7b065553185.tar.gz
zsh-2ccad2310ef04e5dff8a3717182cb7b065553185.zip
22599: use wide character widths in completion
Diffstat (limited to 'Src/utils.c')
-rw-r--r--Src/utils.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/Src/utils.c b/Src/utils.c
index 8fdf2c0ab..2bfae667c 100644
--- a/Src/utils.c
+++ b/Src/utils.c
@@ -3937,11 +3937,13 @@ mb_metacharlenconv(const char *s, wint_t *wcp)
* Total number of multibyte characters in metafied string s.
* Same answer as iterating mb_metacharlen() and counting calls
* until end of string.
+ *
+ * If width is 1, return total character width rather than number.
*/
/**/
int
-mb_metastrlen(char *ptr)
+mb_metastrlen(char *ptr, int width)
{
char inchar, *laststart;
size_t ret;
@@ -3971,9 +3973,12 @@ mb_metastrlen(char *ptr)
/* Reset, treat as single character */
memset(&mb_shiftstate, 0, sizeof(mb_shiftstate));
ptr = laststart + (*laststart == Meta) + 1;
- }
+ num++;
+ } else if (width)
+ num += wcwidth(wc);
+ else
+ num++;
laststart = ptr;
- num++;
num_in_char = 0;
}
}