From d0b8f5340eb17e76769699caafdb0bd87bcf816b Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 21 Apr 2020 06:32:40 +0000 Subject: Do not clear client pane redraw flags until the redraw actually happens. --- tty.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tty.c b/tty.c index 556931da..98a557b5 100644 --- a/tty.c +++ b/tty.c @@ -1491,6 +1491,7 @@ tty_write(void (*cmdfn)(struct tty *, const struct tty_ctx *), * Redraw is already deferred to redraw another pane - * redraw this one also when that happens. */ + log_debug("adding %%%u to deferred redraw", wp->id); wp->flags |= PANE_REDRAW; break; } -- cgit From 57bd6e0447b0e2b99ddc1c020dbb12ad7f92685e Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 21 Apr 2020 06:34:13 +0000 Subject: Turn off the block flag to reset the state or the cursor will not be moved back to the right place. --- server-client.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/server-client.c b/server-client.c index 8da55ac0..eb29aebb 100644 --- a/server-client.c +++ b/server-client.c @@ -1537,6 +1537,7 @@ focused: static void server_client_reset_state(struct client *c) { + struct tty *tty = &c->tty; struct window *w = c->session->curw->window; struct window_pane *wp = w->active, *loop; struct screen *s; @@ -1547,6 +1548,10 @@ server_client_reset_state(struct client *c) if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED)) return; + /* Disable the block flag. */ + flags = (tty->flags & TTY_BLOCK); + tty->flags &= ~TTY_BLOCK; + /* Get mode from overlay if any, else from screen. */ if (c->overlay_draw != NULL) { s = NULL; @@ -1561,13 +1566,13 @@ server_client_reset_state(struct client *c) log_debug("%s: client %s mode %x", __func__, c->name, mode); /* Reset region and margin. */ - tty_region_off(&c->tty); - tty_margin_off(&c->tty); + tty_region_off(tty); + tty_margin_off(tty); /* Move cursor to pane cursor and offset. */ if (c->overlay_draw == NULL) { cursor = 0; - tty_window_offset(&c->tty, &ox, &oy, &sx, &sy); + tty_window_offset(tty, &ox, &oy, &sx, &sy); if (wp->xoff + s->cx >= ox && wp->xoff + s->cx <= ox + sx && wp->yoff + s->cy >= oy && wp->yoff + s->cy <= oy + sy) { cursor = 1; @@ -1581,7 +1586,8 @@ server_client_reset_state(struct client *c) if (!cursor) mode &= ~MODE_CURSOR; } - tty_cursor(&c->tty, cx, cy); + log_debug("%s: cursor to %u,%u", __func__, cx, cy); + tty_cursor(tty, cx, cy); /* * Set mouse mode if requested. To support dragging, always use button @@ -1604,18 +1610,12 @@ server_client_reset_state(struct client *c) mode &= ~MODE_BRACKETPASTE; /* Set the terminal mode and reset attributes. */ - tty_update_mode(&c->tty, mode, s); - tty_reset(&c->tty); + tty_update_mode(tty, mode, s); + tty_reset(tty); - /* - * All writing must be done, send a sync end (if it was started). It - * may have been started by redrawing so needs to go out even if the - * block flag is set. - */ - flags = (c->tty.flags & TTY_BLOCK); - c->tty.flags &= ~TTY_BLOCK; - tty_sync_end(&c->tty); - c->tty.flags |= flags; + /* All writing must be done, send a sync end (if it was started). */ + tty_sync_end(tty); + tty->flags |= flags; } /* Repeat time callback. */ @@ -1738,7 +1738,6 @@ server_client_check_redraw(struct client *c) } if (~c->flags & CLIENT_REDRAWWINDOW) { - c->redraw_panes = 0; TAILQ_FOREACH(wp, &w->panes, entry) { if (wp->flags & PANE_REDRAW) { log_debug("%s: pane %%%u needs redraw", @@ -1784,6 +1783,7 @@ server_client_check_redraw(struct client *c) tty_update_mode(tty, mode, NULL); screen_redraw_pane(c, wp); } + c->redraw_panes = 0; c->flags &= ~CLIENT_REDRAWPANES; } -- cgit From bd91015b1398bd986644657618aef38794c5dc1f Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 21 Apr 2020 10:37:11 +0000 Subject: 256 and RGB features can imply AX (for aixterm colours). --- tty-features.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tty-features.c b/tty-features.c index 3b12b068..ae0869e1 100644 --- a/tty-features.c +++ b/tty-features.c @@ -74,6 +74,7 @@ static struct tty_feature tty_feature_clipboard = { * 256 palette. */ static const char *tty_feature_rgb_capabilities[] = { + "AX", "setrgbf=\\E[38;2;%p1%d;%p2%d;%p3%dm", "setrgbb=\\E[48;2;%p1%d;%p2%d;%p3%dm", "setab=\\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m", @@ -88,6 +89,7 @@ static struct tty_feature tty_feature_rgb = { /* Terminal supports 256 colours. */ static const char *tty_feature_256_capabilities[] = { + "AX", "setab=\\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m", "setaf=\\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m", NULL -- cgit