mirror of
https://github.com/tmux/tmux.git
synced 2025-09-07 11:58:17 +00:00
Change how sync works to always send the end sequence after all output
is done when we are returning to the event loop (since we always move the cursor at that point). Also a man fix from jmc.
This commit is contained in:
@@ -458,7 +458,6 @@ screen_redraw_screen(struct client *c)
|
|||||||
}
|
}
|
||||||
|
|
||||||
tty_reset(&c->tty);
|
tty_reset(&c->tty);
|
||||||
tty_sync_end(&c->tty);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Redraw a single pane. */
|
/* Redraw a single pane. */
|
||||||
@@ -476,7 +475,6 @@ screen_redraw_pane(struct client *c, struct window_pane *wp)
|
|||||||
screen_redraw_draw_pane(&ctx, wp);
|
screen_redraw_draw_pane(&ctx, wp);
|
||||||
|
|
||||||
tty_reset(&c->tty);
|
tty_reset(&c->tty);
|
||||||
tty_sync_end(&c->tty);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Draw a border cell. */
|
/* Draw a border cell. */
|
||||||
|
@@ -119,7 +119,6 @@ screen_write_initctx(struct screen_write_ctx *ctx, struct tty_ctx *ttyctx,
|
|||||||
ttyctx->orupper = s->rupper;
|
ttyctx->orupper = s->rupper;
|
||||||
|
|
||||||
if (sync && !ctx->sync && ttyctx->wp != NULL) {
|
if (sync && !ctx->sync && ttyctx->wp != NULL) {
|
||||||
log_debug("%s: starting sync", __func__);
|
|
||||||
tty_write(tty_cmd_syncstart, ttyctx);
|
tty_write(tty_cmd_syncstart, ttyctx);
|
||||||
ctx->sync = 1;
|
ctx->sync = 1;
|
||||||
}
|
}
|
||||||
@@ -184,8 +183,6 @@ screen_write_start(struct screen_write_ctx *ctx, struct window_pane *wp,
|
|||||||
void
|
void
|
||||||
screen_write_stop(struct screen_write_ctx *ctx)
|
screen_write_stop(struct screen_write_ctx *ctx)
|
||||||
{
|
{
|
||||||
struct tty_ctx ttyctx;
|
|
||||||
|
|
||||||
screen_write_collect_end(ctx);
|
screen_write_collect_end(ctx);
|
||||||
screen_write_collect_flush(ctx, 0, __func__);
|
screen_write_collect_flush(ctx, 0, __func__);
|
||||||
|
|
||||||
@@ -196,12 +193,6 @@ screen_write_stop(struct screen_write_ctx *ctx)
|
|||||||
ctx->wp->skipped += ctx->skipped;
|
ctx->wp->skipped += ctx->skipped;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->sync) {
|
|
||||||
screen_write_initctx(ctx, &ttyctx, 0);
|
|
||||||
tty_write(tty_cmd_syncend, &ttyctx);
|
|
||||||
log_debug("%s: ending sync", __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(ctx->item);
|
free(ctx->item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1541,7 +1541,7 @@ server_client_reset_state(struct client *c)
|
|||||||
struct window_pane *wp = w->active, *loop;
|
struct window_pane *wp = w->active, *loop;
|
||||||
struct screen *s;
|
struct screen *s;
|
||||||
struct options *oo = c->session->options;
|
struct options *oo = c->session->options;
|
||||||
int mode, cursor;
|
int mode, cursor, flags;
|
||||||
u_int cx = 0, cy = 0, ox, oy, sx, sy;
|
u_int cx = 0, cy = 0, ox, oy, sx, sy;
|
||||||
|
|
||||||
if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED))
|
if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED))
|
||||||
@@ -1606,6 +1606,16 @@ server_client_reset_state(struct client *c)
|
|||||||
/* Set the terminal mode and reset attributes. */
|
/* Set the terminal mode and reset attributes. */
|
||||||
tty_update_mode(&c->tty, mode, s);
|
tty_update_mode(&c->tty, mode, s);
|
||||||
tty_reset(&c->tty);
|
tty_reset(&c->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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Repeat time callback. */
|
/* Repeat time callback. */
|
||||||
|
2
tmux.1
2
tmux.1
@@ -5534,7 +5534,7 @@ The server crashed or otherwise exited without telling the client the reason.
|
|||||||
.Sh TERMINFO EXTENSIONS
|
.Sh TERMINFO EXTENSIONS
|
||||||
.Nm
|
.Nm
|
||||||
understands some unofficial extensions to
|
understands some unofficial extensions to
|
||||||
.Xr terminfo 5.
|
.Xr terminfo 5 .
|
||||||
It is not normally necessary to set these manually, instead the
|
It is not normally necessary to set these manually, instead the
|
||||||
.Ic terminal-features
|
.Ic terminal-features
|
||||||
option should be used.
|
option should be used.
|
||||||
|
1
tmux.h
1
tmux.h
@@ -1992,7 +1992,6 @@ void tty_cmd_reverseindex(struct tty *, const struct tty_ctx *);
|
|||||||
void tty_cmd_setselection(struct tty *, const struct tty_ctx *);
|
void tty_cmd_setselection(struct tty *, const struct tty_ctx *);
|
||||||
void tty_cmd_rawstring(struct tty *, const struct tty_ctx *);
|
void tty_cmd_rawstring(struct tty *, const struct tty_ctx *);
|
||||||
void tty_cmd_syncstart(struct tty *, const struct tty_ctx *);
|
void tty_cmd_syncstart(struct tty *, const struct tty_ctx *);
|
||||||
void tty_cmd_syncend(struct tty *, const struct tty_ctx *);
|
|
||||||
|
|
||||||
/* tty-term.c */
|
/* tty-term.c */
|
||||||
extern struct tty_terms tty_terms;
|
extern struct tty_terms tty_terms;
|
||||||
|
@@ -1150,7 +1150,7 @@ tty_keys_device_status_report(struct tty *tty, const char *buf, size_t len,
|
|||||||
"cstyle,"
|
"cstyle,"
|
||||||
"margins,"
|
"margins,"
|
||||||
"sync,"
|
"sync,"
|
||||||
"title,",
|
"title",
|
||||||
",");
|
",");
|
||||||
} else if (strncmp(tmp, "TMUX ", 5) == 0) {
|
} else if (strncmp(tmp, "TMUX ", 5) == 0) {
|
||||||
tty_add_features(&c->term_features,
|
tty_add_features(&c->term_features,
|
||||||
|
26
tty.c
26
tty.c
@@ -1427,18 +1427,30 @@ tty_draw_line(struct tty *tty, struct window_pane *wp, struct screen *s,
|
|||||||
void
|
void
|
||||||
tty_sync_start(struct tty *tty)
|
tty_sync_start(struct tty *tty)
|
||||||
{
|
{
|
||||||
if ((~tty->flags & TTY_SYNCING) && tty_term_has(tty->term, TTYC_SYNC)) {
|
if (tty->flags & TTY_BLOCK)
|
||||||
|
return;
|
||||||
|
if (tty->flags & TTY_SYNCING)
|
||||||
|
return;
|
||||||
|
tty->flags |= TTY_SYNCING;
|
||||||
|
|
||||||
|
if (tty_term_has(tty->term, TTYC_SYNC)) {
|
||||||
|
log_debug("%s sync start", tty->client->name);
|
||||||
tty_putcode1(tty, TTYC_SYNC, 1);
|
tty_putcode1(tty, TTYC_SYNC, 1);
|
||||||
tty->flags |= TTY_SYNCING;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
tty_sync_end(struct tty *tty)
|
tty_sync_end(struct tty *tty)
|
||||||
{
|
{
|
||||||
if ((tty->flags & TTY_SYNCING) && tty_term_has(tty->term, TTYC_SYNC)) {
|
if (tty->flags & TTY_BLOCK)
|
||||||
|
return;
|
||||||
|
if (~tty->flags & TTY_SYNCING)
|
||||||
|
return;
|
||||||
|
tty->flags &= ~TTY_SYNCING;
|
||||||
|
|
||||||
|
if (tty_term_has(tty->term, TTYC_SYNC)) {
|
||||||
|
log_debug("%s sync end", tty->client->name);
|
||||||
tty_putcode1(tty, TTYC_SYNC, 2);
|
tty_putcode1(tty, TTYC_SYNC, 2);
|
||||||
tty->flags &= ~TTY_SYNCING;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1952,12 +1964,6 @@ tty_cmd_syncstart(struct tty *tty, __unused const struct tty_ctx *ctx)
|
|||||||
tty_sync_start(tty);
|
tty_sync_start(tty);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
tty_cmd_syncend(struct tty *tty, __unused const struct tty_ctx *ctx)
|
|
||||||
{
|
|
||||||
tty_sync_end(tty);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
tty_cell(struct tty *tty, const struct grid_cell *gc, struct window_pane *wp)
|
tty_cell(struct tty *tty, const struct grid_cell *gc, struct window_pane *wp)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user