X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=utf8.c;h=7ddff23fa77fbadf7723bca03d24ad5b8f2baca2;hb=b706fcfe93262e485976ed2bc648b779cc47981f;hp=01d1869fa3df23e71879f15e566d8733168912cd;hpb=2a971012b6be236c46cab7212239d70d92b02715;p=git.git diff --git a/utf8.c b/utf8.c index 01d1869fa..7ddff23fa 100644 --- a/utf8.c +++ b/utf8.c @@ -314,6 +314,20 @@ static void strbuf_add_indented_text(struct strbuf *buf, const char *text, } } +static size_t display_mode_esc_sequence_len(const char *s) +{ + const char *p = s; + if (*p++ != '\033') + return 0; + if (*p++ != '[') + return 0; + while (isdigit(*p) || *p == ';') + p++; + if (*p++ != 'm') + return 0; + return p - s; +} + /* * Wrap the text, if necessary. The variable indent is the indent for the * first line, indent2 is the indent for all other lines. @@ -337,7 +351,13 @@ int strbuf_add_wrapped_text(struct strbuf *buf, } for (;;) { - char c = *text; + char c; + size_t skip; + + while ((skip = display_mode_esc_sequence_len(text))) + text += skip; + + c = *text; if (!c || isspace(c)) { if (w < width || !space) { const char *start = bol;