Merge branch 'rs/color-escape-has-zero-width'
* rs/color-escape-has-zero-width: strbuf_add_wrapped_text(): skip over colour codesmaint
commit
1fdffa6161
|
|
@ -136,9 +136,7 @@ The placeholders are:
|
||||||
- '%n': newline
|
- '%n': newline
|
||||||
- '%x00': print a byte from a hex code
|
- '%x00': print a byte from a hex code
|
||||||
- '%w([<w>[,<i1>[,<i2>]]])': switch line wrapping, like the -w option of
|
- '%w([<w>[,<i1>[,<i2>]]])': switch line wrapping, like the -w option of
|
||||||
linkgit:git-shortlog[1]. NOTE: Color placeholders (`%C*`) are not
|
linkgit:git-shortlog[1].
|
||||||
recognized as having no width, so they should not be put into wrapped
|
|
||||||
sections.
|
|
||||||
|
|
||||||
NOTE: Some placeholders may depend on other options given to the
|
NOTE: Some placeholders may depend on other options given to the
|
||||||
revision traversal engine. For example, the `%g*` reflog options will
|
revision traversal engine. For example, the `%g*` reflog options will
|
||||||
|
|
|
||||||
22
utf8.c
22
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
|
* Wrap the text, if necessary. The variable indent is the indent for the
|
||||||
* first line, indent2 is the indent for all other lines.
|
* first line, indent2 is the indent for all other lines.
|
||||||
|
|
@ -337,7 +351,13 @@ int strbuf_add_wrapped_text(struct strbuf *buf,
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
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 (!c || isspace(c)) {
|
||||||
if (w < width || !space) {
|
if (w < width || !space) {
|
||||||
const char *start = bol;
|
const char *start = bol;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue