On Fri, Oct 11, 2019 at 10:42:20AM +0900, Junio C Hamano wrote:
> Denton Liu <[email protected]> writes:
>
> > static int calculate_width(const struct strbuf *row)
> > {
> > int in_termcode = 0;
> > int width = 0;
> > int i;
> >
> > for (i = 0; i < row.len; i++) {
> > if (row.buf[i] == '\033')
> > in_termcode = 1;
> >
> > if (!in_termcode)
> > width++;
> > else if (row.buf[i] == 'm')
> > in_termcode = 0;
> > }
> > }
>
> Not every byte that is outside the escape sequence contributes to
> one display columns. You would want to take a look at utf8_width()
> for inspiration.
>
Heh, I guess you're right. Looking right below the definition of
utf8_width, I realised we have the utf8_strnwidth function. We should be
able to just call
utf8_strnwidth(row.buf, row.len, 1);