about summary refs log tree commit diff
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.tar.xz
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;
 	}
     }