summaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2021-08-17 08:44:53 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2021-08-17 08:44:53 +0000
commitec7002bef17a1da929ba62feb7652c6aa4cd31ee (patch)
treefd6b41afe124474f1fcb488351267a54f98b6df7 /usr.bin
parent9c925caa9a2e9f6a6ab1c7f28390ac29ab38e16d (diff)
Be more sophisticated about enabling synchronized updates when there is
an overlay and treat it like the active pane (use for commands which move the cursor only). When there is an overlay also use it for all panes and not just the active pane. GitHub issue 2826.
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/tmux/screen-write.c19
-rw-r--r--usr.bin/tmux/tty.c19
2 files changed, 31 insertions, 7 deletions
diff --git a/usr.bin/tmux/screen-write.c b/usr.bin/tmux/screen-write.c
index 1e8703df4a6..5ea56bd1220 100644
--- a/usr.bin/tmux/screen-write.c
+++ b/usr.bin/tmux/screen-write.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: screen-write.c,v 1.198 2021/08/12 11:35:53 nicm Exp $ */
+/* $OpenBSD: screen-write.c,v 1.199 2021/08/17 08:44:52 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -197,9 +197,20 @@ screen_write_initctx(struct screen_write_ctx *ctx, struct tty_ctx *ttyctx,
}
}
- if (ctx->wp != NULL &&
- (~ctx->flags & SCREEN_WRITE_SYNC) &&
- (sync || ctx->wp != ctx->wp->window->active)) {
+ if (~ctx->flags & SCREEN_WRITE_SYNC) {
+ /*
+ * For the active pane or for an overlay (no pane), we want to
+ * only use synchronized updates if requested (commands that
+ * move the cursor); for other panes, always use it, since the
+ * cursor will have to move.
+ */
+ if (ctx->wp != NULL) {
+ if (ctx->wp != ctx->wp->window->active)
+ ttyctx->num = 1;
+ else
+ ttyctx->num = sync;
+ } else
+ ttyctx->num = 0x10|sync;
tty_write(tty_cmd_syncstart, ttyctx);
ctx->flags |= SCREEN_WRITE_SYNC;
}
diff --git a/usr.bin/tmux/tty.c b/usr.bin/tmux/tty.c
index aa0c143b1f6..1224871e990 100644
--- a/usr.bin/tmux/tty.c
+++ b/usr.bin/tmux/tty.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tty.c,v 1.401 2021/08/13 18:54:54 nicm Exp $ */
+/* $OpenBSD: tty.c,v 1.402 2021/08/17 08:44:52 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -2039,9 +2039,22 @@ tty_cmd_rawstring(struct tty *tty, const struct tty_ctx *ctx)
}
void
-tty_cmd_syncstart(struct tty *tty, __unused const struct tty_ctx *ctx)
+tty_cmd_syncstart(struct tty *tty, const struct tty_ctx *ctx)
{
- tty_sync_start(tty);
+ if (ctx->num == 0x11) {
+ /*
+ * This is an overlay and a command that moves, the cursor so
+ * start synchronized updates.
+ */
+ tty_sync_start(tty);
+ } else if (~ctx->num & 0x10) {
+ /*
+ * This is a pane. If there is an overlay, always start;
+ * otherwise, only if requested.
+ */
+ if (ctx->num || tty->client->overlay_draw != NULL)
+ tty_sync_start(tty);
+ }
}
void