diff options
author | nicm <nicm> | 2017-02-21 10:30:15 +0000 |
---|---|---|
committer | nicm <nicm> | 2017-02-21 10:30:15 +0000 |
commit | 9e4c5133c8212c8d60c097e5900e6b801f62abfa (patch) | |
tree | 97d8a25ebee50d691bba347fbc3edefd40fe538d /screen-write.c | |
parent | f27e1d07fced949f6186ef57fcb8869e70c7d1c7 (diff) | |
download | rtmux-9e4c5133c8212c8d60c097e5900e6b801f62abfa.tar.gz rtmux-9e4c5133c8212c8d60c097e5900e6b801f62abfa.tar.bz2 rtmux-9e4c5133c8212c8d60c097e5900e6b801f62abfa.zip |
Scrolling at least needs to be flushed before sending EL to the terminal
(but it is simpler to flush everything, so do that instead).
Diffstat (limited to 'screen-write.c')
-rw-r--r-- | screen-write.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/screen-write.c b/screen-write.c index f0ea4c14..937870f9 100644 --- a/screen-write.c +++ b/screen-write.c @@ -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); screen_write_collect_clear(ctx, s->cy, 1); + screen_write_collect_flush(ctx, 0); 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) 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); } @@ -787,8 +787,7 @@ screen_write_clearstartofline(struct screen_write_ctx *ctx, u_int bg) if (s->cx > sx - 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); } @@ -863,6 +862,9 @@ screen_write_linefeed(struct screen_write_ctx *ctx, int wrapped) else 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) { grid_view_scroll_region_up(gd, s->rupper, s->rlower); 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); } 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; 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); for (y = s->rupper; y < s->rlower; y++) { 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) screen_write_collect_end(ctx); if (s->cx > sx - 1) { + log_debug("%s: wrapped at %u,%u", __func__, s->cx, s->cy); screen_write_linefeed(ctx, 1); s->cx = 0; } |