mirror of
https://github.com/tmux/tmux.git
synced 2024-12-24 18:38:48 +00:00
Do not expand single character format aliases inside #[] since they
interfere with colours. GitHub issue 3239 from Magnus Gross.
This commit is contained in:
parent
9c89f7c2af
commit
786cff8db9
18
format.c
18
format.c
@ -4606,7 +4606,7 @@ format_expand1(struct format_expand_state *es, const char *fmt)
|
|||||||
{
|
{
|
||||||
struct format_tree *ft = es->ft;
|
struct format_tree *ft = es->ft;
|
||||||
char *buf, *out, *name;
|
char *buf, *out, *name;
|
||||||
const char *ptr, *s;
|
const char *ptr, *s, *style_end = NULL;
|
||||||
size_t off, len, n, outlen;
|
size_t off, len, n, outlen;
|
||||||
int ch, brackets;
|
int ch, brackets;
|
||||||
char expanded[8192];
|
char expanded[8192];
|
||||||
@ -4701,13 +4701,14 @@ format_expand1(struct format_expand_state *es, const char *fmt)
|
|||||||
break;
|
break;
|
||||||
fmt += n + 1;
|
fmt += n + 1;
|
||||||
continue;
|
continue;
|
||||||
|
case '[':
|
||||||
case '#':
|
case '#':
|
||||||
/*
|
/*
|
||||||
* If ##[ (with two or more #s), then it is a style and
|
* If ##[ (with two or more #s), then it is a style and
|
||||||
* can be left for format_draw to handle.
|
* can be left for format_draw to handle.
|
||||||
*/
|
*/
|
||||||
ptr = fmt;
|
ptr = fmt - (ch == '[');
|
||||||
n = 2;
|
n = 2 - (ch == '[');
|
||||||
while (*ptr == '#') {
|
while (*ptr == '#') {
|
||||||
ptr++;
|
ptr++;
|
||||||
n++;
|
n++;
|
||||||
@ -4721,6 +4722,7 @@ format_expand1(struct format_expand_state *es, const char *fmt)
|
|||||||
memcpy(buf + off, fmt - 2, n + 1);
|
memcpy(buf + off, fmt - 2, n + 1);
|
||||||
off += n + 1;
|
off += n + 1;
|
||||||
fmt = ptr + 1;
|
fmt = ptr + 1;
|
||||||
|
style_end = format_skip(fmt - 2, "]");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
@ -4735,10 +4737,12 @@ format_expand1(struct format_expand_state *es, const char *fmt)
|
|||||||
continue;
|
continue;
|
||||||
default:
|
default:
|
||||||
s = NULL;
|
s = NULL;
|
||||||
if (ch >= 'A' && ch <= 'Z')
|
if (fmt > style_end) { /* skip inside #[] */
|
||||||
s = format_upper[ch - 'A'];
|
if (ch >= 'A' && ch <= 'Z')
|
||||||
else if (ch >= 'a' && ch <= 'z')
|
s = format_upper[ch - 'A'];
|
||||||
s = format_lower[ch - 'a'];
|
else if (ch >= 'a' && ch <= 'z')
|
||||||
|
s = format_lower[ch - 'a'];
|
||||||
|
}
|
||||||
if (s == NULL) {
|
if (s == NULL) {
|
||||||
while (len - off < 3) {
|
while (len - off < 3) {
|
||||||
buf = xreallocarray(buf, 2, len);
|
buf = xreallocarray(buf, 2, len);
|
||||||
|
Loading…
Reference in New Issue
Block a user