diff options
Diffstat (limited to 'third_party/git/column.c')
-rw-r--r-- | third_party/git/column.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/third_party/git/column.c b/third_party/git/column.c index 4a38eed32260..7a17c14b822f 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; } /* |