mirror of
https://github.com/tmate-io/tmate.git
synced 2024-11-07 16:54:01 +01:00
Count brackets in #{?...} so that nested conditional formats work, from
Daniel De Graaf.
This commit is contained in:
parent
17c2c4219d
commit
9952201ca7
34
format.c
34
format.c
@ -670,7 +670,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen,
|
||||
char *copy, *copy0, *endptr, *ptr, *saved, *trimmed, *value;
|
||||
size_t valuelen;
|
||||
u_long limit = 0;
|
||||
int modifiers = 0;
|
||||
int modifiers = 0, brackets;
|
||||
|
||||
/* Make a copy of the key. */
|
||||
copy0 = copy = xmalloc(keylen + 1);
|
||||
@ -718,20 +718,26 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen,
|
||||
goto fail;
|
||||
*ptr = '\0';
|
||||
|
||||
value = saved = format_find(ft, copy + 1, modifiers);
|
||||
if (value != NULL && *value != '\0' &&
|
||||
(value[0] != '0' || value[1] != '\0')) {
|
||||
value = ptr + 1;
|
||||
ptr = strchr(value, ',');
|
||||
if (ptr == NULL)
|
||||
goto fail;
|
||||
*ptr = '\0';
|
||||
} else {
|
||||
ptr = strchr(ptr + 1, ',');
|
||||
if (ptr == NULL)
|
||||
goto fail;
|
||||
value = ptr + 1;
|
||||
value = ptr + 1;
|
||||
saved = format_find(ft, copy + 1, modifiers);
|
||||
|
||||
brackets = 0;
|
||||
for (ptr = ptr + 1; *ptr != '\0'; ptr++) {
|
||||
if (*ptr == '{')
|
||||
brackets++;
|
||||
if (*ptr == '}')
|
||||
brackets--;
|
||||
if (*ptr == ',' && brackets == 0)
|
||||
break;
|
||||
}
|
||||
if (*ptr == '\0')
|
||||
goto fail;
|
||||
|
||||
if (saved != NULL && *saved != '\0' &&
|
||||
(saved[0] != '0' || saved[1] != '\0')) {
|
||||
*ptr = '\0';
|
||||
} else
|
||||
value = ptr + 1;
|
||||
value = format_expand(ft, value);
|
||||
free(saved);
|
||||
saved = value;
|
||||
|
2
screen.c
2
screen.c
@ -194,8 +194,6 @@ screen_resize_y(struct screen *s, u_int sy)
|
||||
* Now just increase the history size, if possible, to take
|
||||
* over the lines which are left. If history is off, delete
|
||||
* lines from the top.
|
||||
*
|
||||
* XXX Should apply history limit?
|
||||
*/
|
||||
available = s->cy;
|
||||
if (gd->flags & GRID_HISTORY)
|
||||
|
Loading…
Reference in New Issue
Block a user