about summary refs log tree commit diff
path: root/third_party/git/column.c
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/git/column.c')
-rw-r--r--third_party/git/column.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/third_party/git/column.c b/third_party/git/column.c
index 4a38eed322..7a17c14b82 100644
--- a/third_party/git/column.c
+++ b/third_party/git/column.c
@@ -23,7 +23,18 @@ struct column_data {
 /* return length of 's' in letters, ANSI escapes stripped */
 static int item_length(const char *s)
 {
-	return utf8_strnwidth(s, -1, 1);
+	int len, i = 0;
+	struct strbuf str = STRBUF_INIT;
+
+	strbuf_addstr(&str, s);
+	while ((s = strstr(str.buf + i, "\033[")) != NULL) {
+		int len = strspn(s + 2, "0123456789;");
+		i = s - str.buf;
+		strbuf_remove(&str, i, len + 3); /* \033[<len><func char> */
+	}
+	len = utf8_strwidth(str.buf);
+	strbuf_release(&str);
+	return len;
 }
 
 /*