mirror of
https://github.com/tmux/tmux.git
synced 2024-12-13 01:48:47 +00:00
Scrolling at least needs to be flushed before sending EL to the terminal
(but it is simpler to flush everything, so do that instead).
This commit is contained in:
parent
f27e1d07fc
commit
9e4c5133c8
@ -741,6 +741,7 @@ screen_write_clearline(struct screen_write_ctx *ctx, u_int bg)
|
|||||||
grid_view_clear(s->grid, 0, s->cy, sx, 1, bg);
|
grid_view_clear(s->grid, 0, s->cy, sx, 1, bg);
|
||||||
|
|
||||||
screen_write_collect_clear(ctx, s->cy, 1);
|
screen_write_collect_clear(ctx, s->cy, 1);
|
||||||
|
screen_write_collect_flush(ctx, 0);
|
||||||
tty_write(tty_cmd_clearline, &ttyctx);
|
tty_write(tty_cmd_clearline, &ttyctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -764,8 +765,7 @@ screen_write_clearendofline(struct screen_write_ctx *ctx, u_int bg)
|
|||||||
|
|
||||||
if (s->cx == 0)
|
if (s->cx == 0)
|
||||||
screen_write_collect_clear(ctx, s->cy, 1);
|
screen_write_collect_clear(ctx, s->cy, 1);
|
||||||
else
|
screen_write_collect_flush(ctx, 0);
|
||||||
screen_write_collect_flush(ctx, 0);
|
|
||||||
tty_write(tty_cmd_clearendofline, &ttyctx);
|
tty_write(tty_cmd_clearendofline, &ttyctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -787,8 +787,7 @@ screen_write_clearstartofline(struct screen_write_ctx *ctx, u_int bg)
|
|||||||
|
|
||||||
if (s->cx > sx - 1)
|
if (s->cx > sx - 1)
|
||||||
screen_write_collect_clear(ctx, s->cy, 1);
|
screen_write_collect_clear(ctx, s->cy, 1);
|
||||||
else
|
screen_write_collect_flush(ctx, 0);
|
||||||
screen_write_collect_flush(ctx, 0);
|
|
||||||
tty_write(tty_cmd_clearstartofline, &ttyctx);
|
tty_write(tty_cmd_clearstartofline, &ttyctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -863,6 +862,9 @@ screen_write_linefeed(struct screen_write_ctx *ctx, int wrapped)
|
|||||||
else
|
else
|
||||||
gl->flags &= ~GRID_LINE_WRAPPED;
|
gl->flags &= ~GRID_LINE_WRAPPED;
|
||||||
|
|
||||||
|
log_debug("%s: at %u,%u (region %u-%u)", __func__, s->cx, s->cy,
|
||||||
|
s->rupper, s->rlower);
|
||||||
|
|
||||||
if (s->cy == s->rlower) {
|
if (s->cy == s->rlower) {
|
||||||
grid_view_scroll_region_up(gd, s->rupper, s->rlower);
|
grid_view_scroll_region_up(gd, s->rupper, s->rlower);
|
||||||
screen_write_collect_scroll(ctx);
|
screen_write_collect_scroll(ctx);
|
||||||
@ -999,7 +1001,7 @@ screen_write_collect_clear(struct screen_write_ctx *ctx, u_int y, u_int n)
|
|||||||
free(ci);
|
free(ci);
|
||||||
}
|
}
|
||||||
ctx->skipped += size;
|
ctx->skipped += size;
|
||||||
log_debug("discarding %zu bytes on line %u", size, i);
|
log_debug("%s: dropped %zu bytes (line %u)", __func__, size, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1011,6 +1013,9 @@ screen_write_collect_scroll(struct screen_write_ctx *ctx)
|
|||||||
struct screen_write_collect_line *cl;
|
struct screen_write_collect_line *cl;
|
||||||
u_int y;
|
u_int y;
|
||||||
|
|
||||||
|
log_debug("%s: at %u,%u (region %u-%u)", __func__, s->cx, s->cy,
|
||||||
|
s->rupper, s->rlower);
|
||||||
|
|
||||||
screen_write_collect_clear(ctx, s->rupper, 1);
|
screen_write_collect_clear(ctx, s->rupper, 1);
|
||||||
for (y = s->rupper; y < s->rlower; y++) {
|
for (y = s->rupper; y < s->rlower; y++) {
|
||||||
cl = &ctx->list[y + 1];
|
cl = &ctx->list[y + 1];
|
||||||
@ -1122,6 +1127,7 @@ screen_write_collect_add(struct screen_write_ctx *ctx,
|
|||||||
if (s->cx > sx - 1 || ctx->item->used > sx - 1 - s->cx)
|
if (s->cx > sx - 1 || ctx->item->used > sx - 1 - s->cx)
|
||||||
screen_write_collect_end(ctx);
|
screen_write_collect_end(ctx);
|
||||||
if (s->cx > sx - 1) {
|
if (s->cx > sx - 1) {
|
||||||
|
log_debug("%s: wrapped at %u,%u", __func__, s->cx, s->cy);
|
||||||
screen_write_linefeed(ctx, 1);
|
screen_write_linefeed(ctx, 1);
|
||||||
s->cx = 0;
|
s->cx = 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user