=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/status.c,v retrieving revision 1.187 retrieving revision 1.188 diff -u -r1.187 -r1.188 --- src/usr.bin/tmux/status.c 2019/03/16 17:14:07 1.187 +++ src/usr.bin/tmux/status.c 2019/03/16 17:53:55 1.188 @@ -1,4 +1,4 @@ -/* $OpenBSD: status.c,v 1.187 2019/03/16 17:14:07 nicm Exp $ */ +/* $OpenBSD: status.c,v 1.188 2019/03/16 17:53:55 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -323,18 +323,23 @@ /* Save as old status line. */ static void -status_save_old(struct status_line *sl) +status_save_old(struct client *c) { + struct status_line *sl = &c->status; + if (sl->old_screen == NULL) { sl->old_screen = xmalloc(sizeof *sl->old_screen); memcpy(sl->old_screen, &sl->screen, sizeof *sl->old_screen); + screen_init(&c->status.screen, c->tty.sx, 1, 0); } } /* Free old status line. */ static void -status_free_old(struct status_line *sl) +status_free_old(struct client *c) { + struct status_line *sl = &c->status; + if (sl->old_screen != NULL) { screen_free(sl->old_screen); free(sl->old_screen); @@ -361,7 +366,7 @@ int larrow, rarrow; /* Delete the saved status line, if any. */ - status_free_old(sl); + status_free_old(c); /* No status line? */ lines = status_line_size(c); @@ -629,10 +634,8 @@ int delay; status_message_clear(c); + status_save_old(c); - status_save_old(&c->status); - screen_init(&c->status.screen, c->tty.sx, 1, 0); - va_start(ap, fmt); xvasprintf(&c->message_string, fmt, ap); va_end(ap); @@ -744,9 +747,7 @@ status_message_clear(c); status_prompt_clear(c); - - status_save_old(&c->status); - screen_init(&c->status.screen, c->tty.sx, 1, 0); + status_save_old(c); c->prompt_string = format_expand_time(ft, msg);