Hi René, On Sun, 13 Oct 2019, René Scharfe wrote: > Make use of utf8_strnwidth()'s feature to skip ANSI escape sequences > instead of open-coding it. This shortens the code and makes it more > consistent. Sounds good. > This changes the behavior, though: The old code skips all kinds of > Control Sequence Introducer sequences, while utf8_strnwidth() only skips > the Select Graphic Rendition kind, i.e. those ending with "m". They are > used for specifying color and font attributes like boldness. The only > other kind of escape sequence we print in Git is Erase in Line, ending > with "K". That's not used for columnar output, so this difference > actually doesn't matter here. Arguably, the "Erase in Line" thing should re-set the width to 0, no? But as you say, this is not needed for this patch. Thanks, Dscho > > Signed-off-by: René Scharfe <l.s.r@xxxxxx> > --- > column.c | 13 +------------ > 1 file changed, 1 insertion(+), 12 deletions(-) > > diff --git a/column.c b/column.c > index 7a17c14b82..4a38eed322 100644 > --- a/column.c > +++ b/column.c > @@ -23,18 +23,7 @@ struct column_data { > /* return length of 's' in letters, ANSI escapes stripped */ > static int item_length(const char *s) > { > - 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; > + return utf8_strnwidth(s, -1, 1); > } > > /* > -- > 2.23.0 >