mirror of
https://github.com/tmux/tmux.git
synced 2025-01-09 09:38:48 +00:00
For passthrough, don't write to clients attached to different sessions,
based on a fix from Sergei Grechanik.
This commit is contained in:
parent
a9ac614691
commit
d73078838d
@ -132,6 +132,12 @@ screen_write_set_client_cb(struct tty_ctx *ttyctx, struct client *c)
|
|||||||
{
|
{
|
||||||
struct window_pane *wp = ttyctx->arg;
|
struct window_pane *wp = ttyctx->arg;
|
||||||
|
|
||||||
|
if (ttyctx->allow_invisible_panes) {
|
||||||
|
if (session_has(c->session, wp->window))
|
||||||
|
return (1);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
if (c->session->curw->window != wp->window)
|
if (c->session->curw->window != wp->window)
|
||||||
return (0);
|
return (0);
|
||||||
if (wp->layout_cell == NULL)
|
if (wp->layout_cell == NULL)
|
||||||
|
27
tty.c
27
tty.c
@ -34,8 +34,6 @@
|
|||||||
|
|
||||||
static int tty_log_fd = -1;
|
static int tty_log_fd = -1;
|
||||||
|
|
||||||
static int tty_client_ready(struct client *);
|
|
||||||
|
|
||||||
static void tty_set_italics(struct tty *);
|
static void tty_set_italics(struct tty *);
|
||||||
static int tty_try_colour(struct tty *, int, const char *);
|
static int tty_try_colour(struct tty *, int, const char *);
|
||||||
static void tty_force_cursor_colour(struct tty *, int);
|
static void tty_force_cursor_colour(struct tty *, int);
|
||||||
@ -1607,11 +1605,21 @@ tty_sync_end(struct tty *tty)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
tty_client_ready(struct client *c)
|
tty_client_ready(const struct tty_ctx *ctx, struct client *c)
|
||||||
{
|
{
|
||||||
if (c->session == NULL || c->tty.term == NULL)
|
if (c->session == NULL || c->tty.term == NULL)
|
||||||
return (0);
|
return (0);
|
||||||
if (c->flags & (CLIENT_REDRAWWINDOW|CLIENT_SUSPENDED))
|
if (c->flags & CLIENT_SUSPENDED)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If invisible panes are allowed (used for passthrough), don't care if
|
||||||
|
* redrawing or frozen.
|
||||||
|
*/
|
||||||
|
if (ctx->allow_invisible_panes)
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
if (c->flags & CLIENT_REDRAWWINDOW)
|
||||||
return (0);
|
return (0);
|
||||||
if (c->tty.flags & TTY_FREEZE)
|
if (c->tty.flags & TTY_FREEZE)
|
||||||
return (0);
|
return (0);
|
||||||
@ -1628,21 +1636,14 @@ tty_write(void (*cmdfn)(struct tty *, const struct tty_ctx *),
|
|||||||
if (ctx->set_client_cb == NULL)
|
if (ctx->set_client_cb == NULL)
|
||||||
return;
|
return;
|
||||||
TAILQ_FOREACH(c, &clients, entry) {
|
TAILQ_FOREACH(c, &clients, entry) {
|
||||||
if (ctx->allow_invisible_panes) {
|
if (tty_client_ready(ctx, c)) {
|
||||||
if (c->session == NULL ||
|
|
||||||
c->tty.term == NULL ||
|
|
||||||
c->flags & CLIENT_SUSPENDED)
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
if (!tty_client_ready(c))
|
|
||||||
continue;
|
|
||||||
state = ctx->set_client_cb(ctx, c);
|
state = ctx->set_client_cb(ctx, c);
|
||||||
if (state == -1)
|
if (state == -1)
|
||||||
break;
|
break;
|
||||||
if (state == 0)
|
if (state == 0)
|
||||||
continue;
|
continue;
|
||||||
|
cmdfn(&c->tty, ctx);
|
||||||
}
|
}
|
||||||
cmdfn(&c->tty, ctx);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user