Add a flag to force redrawing of the status line even if the content
authornicm <nicm@openbsd.org>
Sun, 19 Aug 2018 20:13:07 +0000 (20:13 +0000)
committernicm <nicm@openbsd.org>
Sun, 19 Aug 2018 20:13:07 +0000 (20:13 +0000)
hasn't changed, needed for resizing.

usr.bin/tmux/screen-redraw.c
usr.bin/tmux/server-client.c
usr.bin/tmux/tmux.h

index 4cb2145..f0cf2a8 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: screen-redraw.c,v 1.53 2018/08/19 16:45:03 nicm Exp $ */
+/* $OpenBSD: screen-redraw.c,v 1.54 2018/08/19 20:13:07 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -344,8 +344,8 @@ screen_redraw_draw_pane_status(struct screen_redraw_ctx *ctx)
 }
 
 /* Update status line and change flags if unchanged. */
-static void
-screen_redraw_update(struct client *c)
+static int
+screen_redraw_update(struct client *c, int flags)
 {
        struct window           *w = c->session->curw->window;
        struct window_pane      *wp;
@@ -358,8 +358,8 @@ screen_redraw_update(struct client *c)
                redraw = status_prompt_redraw(c);
        else
                redraw = status_redraw(c);
-       if (!redraw)
-               c->flags &= ~CLIENT_REDRAWSTATUS;
+       if (!redraw && (~flags & CLIENT_REDRAWSTATUSALWAYS))
+               flags &= ~CLIENT_REDRAWSTATUS;
 
        if (options_get_number(wo, "pane-border-status") != CELL_STATUS_OFF) {
                redraw = 0;
@@ -368,8 +368,9 @@ screen_redraw_update(struct client *c)
                                redraw = 1;
                }
                if (redraw)
-                       c->flags |= CLIENT_REDRAWBORDERS;
+                       flags |= CLIENT_REDRAWBORDERS;
        }
+       return (flags);
 }
 
 /* Set up redraw context. */
@@ -398,21 +399,23 @@ void
 screen_redraw_screen(struct client *c)
 {
        struct screen_redraw_ctx        ctx;
+       int                             flags;
 
        if (c->flags & CLIENT_SUSPENDED)
                return;
 
-       screen_redraw_update(c);
+       flags = screen_redraw_update(c, c->flags);
        screen_redraw_set_context(c, &ctx);
 
-       if (c->flags & (CLIENT_REDRAWWINDOW|CLIENT_REDRAWBORDERS)) {
+       if (flags & (CLIENT_REDRAWWINDOW|CLIENT_REDRAWBORDERS)) {
                if (ctx.pane_status != CELL_STATUS_OFF)
                        screen_redraw_draw_pane_status(&ctx);
                screen_redraw_draw_borders(&ctx);
        }
-       if (c->flags & CLIENT_REDRAWWINDOW)
+       if (flags & CLIENT_REDRAWWINDOW)
                screen_redraw_draw_panes(&ctx);
-       if (ctx.lines != 0 && (c->flags & CLIENT_REDRAWSTATUS))
+       if (ctx.lines != 0 &&
+           (flags & (CLIENT_REDRAWSTATUS|CLIENT_REDRAWSTATUSALWAYS)))
                screen_redraw_draw_status(&ctx);
        tty_reset(&c->tty);
 }
index 87062ed..804ed58 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: server-client.c,v 1.256 2018/08/19 16:45:03 nicm Exp $ */
+/* $OpenBSD: server-client.c,v 1.257 2018/08/19 20:13:07 nicm Exp $ */
 
 /*
  * Copyright (c) 2009 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -1319,6 +1319,12 @@ server_client_check_redraw(struct client *c)
 
        if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED))
                return;
+       if (c->flags & CLIENT_ALLREDRAWFLAGS) {
+               log_debug("%s: redraw%s%s%s", c->name,
+                   (c->flags & CLIENT_REDRAWWINDOW) ? " window" : "",
+                   (c->flags & CLIENT_REDRAWSTATUS) ? " status" : "",
+                   (c->flags & CLIENT_REDRAWBORDERS) ? " borders" : "");
+       }
 
        /*
         * If there is outstanding data, defer the redraw until it has been
index 58b0cb3..c34eab2 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.840 2018/08/19 16:45:03 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.841 2018/08/19 20:13:07 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -1350,8 +1350,12 @@ struct client {
 #define CLIENT_TRIPLECLICK 0x200000
 #define CLIENT_SIZECHANGED 0x400000
 #define CLIENT_STATUSOFF 0x800000
+#define CLIENT_REDRAWSTATUSALWAYS 0x1000000
 #define CLIENT_ALLREDRAWFLAGS \
-       (CLIENT_REDRAWWINDOW|CLIENT_REDRAWSTATUS|CLIENT_REDRAWBORDERS)
+       (CLIENT_REDRAWWINDOW| \
+        CLIENT_REDRAWSTATUS| \
+        CLIENT_REDRAWSTATUSALWAYS| \
+        CLIENT_REDRAWBORDERS)
        int              flags;
        struct key_table *keytable;