diff options
Diffstat (limited to 'screen-redraw.c')
-rw-r--r-- | screen-redraw.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/screen-redraw.c b/screen-redraw.c index 9880433d..691b2194 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -274,8 +274,8 @@ screen_redraw_make_pane_status(struct client *c, struct window *w, struct grid_cell gc; const char *fmt; struct format_tree *ft; - char *out; - size_t outlen; + char *expanded; + u_int width, i; struct screen_write_ctx ctx; struct screen old; @@ -289,27 +289,27 @@ screen_redraw_make_pane_status(struct client *c, struct window *w, ft = format_create(c, NULL, FORMAT_PANE|wp->id, 0); format_defaults(ft, c, NULL, NULL, wp); + expanded = format_expand_time(ft, fmt); + wp->status_size = width = wp->sx - 4; + memcpy(&old, &wp->status_screen, sizeof old); - screen_init(&wp->status_screen, wp->sx, 1, 0); + screen_init(&wp->status_screen, width, 1, 0); wp->status_screen.mode = 0; - out = format_expand(ft, fmt); - outlen = screen_write_cstrlen("%s", out); - if (outlen > wp->sx - 4) - outlen = wp->sx - 4; - screen_resize(&wp->status_screen, outlen, 1, 0); - screen_write_start(&ctx, NULL, &wp->status_screen); + + gc.attr |= GRID_ATTR_CHARSET; + for (i = 0; i < width; i++) + screen_write_putc(&ctx, &gc, 'q'); + gc.attr &= ~GRID_ATTR_CHARSET; + screen_write_cursormove(&ctx, 0, 0, 0); - screen_write_clearline(&ctx, 8); - screen_write_cnputs(&ctx, outlen, &gc, "%s", out); + format_draw(&ctx, &gc, width, expanded, NULL); screen_write_stop(&ctx); - free(out); + free(expanded); format_free(ft); - wp->status_size = outlen; - if (grid_compare(wp->status_screen.grid, old.grid) == 0) { screen_free(&old); return (0); |