Re: [PATCH] column: use utf8_strnwidth() to strip out ANSI color escapes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
>

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux