diff --git a/screen-write.c b/screen-write.c index 4c328ca2..16a9c1d7 100644 --- a/screen-write.c +++ b/screen-write.c @@ -25,10 +25,10 @@ static void screen_write_collect_clear(struct screen_write_ctx *, u_int, u_int); -static int screen_write_collect_clear_end(struct screen_write_ctx *, u_int, +static void screen_write_collect_clear_end(struct screen_write_ctx *, u_int, + u_int); +static void screen_write_collect_clear_start(struct screen_write_ctx *, u_int, u_int); -static int screen_write_collect_clear_start(struct screen_write_ctx *, - u_int, u_int, u_int); static void screen_write_collect_scroll(struct screen_write_ctx *); static void screen_write_collect_flush(struct screen_write_ctx *, int, const char *); @@ -1127,13 +1127,12 @@ screen_write_clearendofline(struct screen_write_ctx *ctx, u_int bg) grid_view_clear(s->grid, s->cx, s->cy, sx - s->cx, 1, bg); - if (!screen_write_collect_clear_end(ctx, s->cy, s->cx, bg)) { - ci->x = s->cx; - ci->type = CLEAR_END; - ci->bg = bg; - TAILQ_INSERT_TAIL(&ctx->s->write_list[s->cy].items, ci, entry); - ctx->item = xcalloc(1, sizeof *ctx->item); - } + screen_write_collect_clear_end(ctx, s->cy, s->cx); + ci->x = s->cx; + ci->type = CLEAR_END; + ci->bg = bg; + TAILQ_INSERT_TAIL(&ctx->s->write_list[s->cy].items, ci, entry); + ctx->item = xcalloc(1, sizeof *ctx->item); } /* Clear to start of line from cursor. */ @@ -1154,13 +1153,12 @@ screen_write_clearstartofline(struct screen_write_ctx *ctx, u_int bg) else grid_view_clear(s->grid, 0, s->cy, s->cx + 1, 1, bg); - if (!screen_write_collect_clear_start(ctx, s->cy, s->cx, bg)) { - ci->x = s->cx; - ci->type = CLEAR_START; - ci->bg = bg; - TAILQ_INSERT_TAIL(&ctx->s->write_list[s->cy].items, ci, entry); - ctx->item = xcalloc(1, sizeof *ctx->item); - } + screen_write_collect_clear_start(ctx, s->cy, s->cx); + ci->x = s->cx; + ci->type = CLEAR_START; + ci->bg = bg; + TAILQ_INSERT_TAIL(&ctx->s->write_list[s->cy].items, ci, entry); + ctx->item = xcalloc(1, sizeof *ctx->item); } /* Move cursor to px,py. */ @@ -1393,25 +1391,18 @@ screen_write_clearhistory(struct screen_write_ctx *ctx) } /* Clear to start of a collected line. */ -static int -screen_write_collect_clear_start(struct screen_write_ctx *ctx, u_int y, u_int x, - u_int bg) +static void +screen_write_collect_clear_start(struct screen_write_ctx *ctx, u_int y, u_int x) { struct screen_write_collect_item *ci, *tmp; size_t size = 0; u_int items = 0; - int redundant = 0; if (TAILQ_EMPTY(&ctx->s->write_list[y].items)) - return (0); + return; TAILQ_FOREACH_SAFE(ci, &ctx->s->write_list[y].items, entry, tmp) { switch (ci->type) { case CLEAR_START: - if (ci->x >= x) { - if (ci->bg == bg) - redundant = 1; - continue; - } break; case CLEAR_END: if (ci->x <= x) @@ -1430,21 +1421,18 @@ screen_write_collect_clear_start(struct screen_write_ctx *ctx, u_int y, u_int x, ctx->skipped += size; log_debug("%s: dropped %u items (%zu bytes) (line %u)", __func__, items, size, y); - return (redundant); } /* Clear to end of a collected line. */ -static int -screen_write_collect_clear_end(struct screen_write_ctx *ctx, u_int y, u_int x, - u_int bg) +static void +screen_write_collect_clear_end(struct screen_write_ctx *ctx, u_int y, u_int x) { struct screen_write_collect_item *ci, *tmp; size_t size = 0; - int redundant = 0; u_int items = 0; if (TAILQ_EMPTY(&ctx->s->write_list[y].items)) - return (0); + return; TAILQ_FOREACH_SAFE(ci, &ctx->s->write_list[y].items, entry, tmp) { switch (ci->type) { case CLEAR_START: @@ -1452,11 +1440,6 @@ screen_write_collect_clear_end(struct screen_write_ctx *ctx, u_int y, u_int x, ci->x = x; continue; case CLEAR_END: - if (ci->x <= x) { - if (ci->bg == bg) - redundant = 1; - continue; - } break; case TEXT: if (ci->x < x) @@ -1471,7 +1454,6 @@ screen_write_collect_clear_end(struct screen_write_ctx *ctx, u_int y, u_int x, ctx->skipped += size; log_debug("%s: dropped %u items (%zu bytes) (line %u)", __func__, items, size, y); - return (redundant); } /* Clear collected lines. */ @@ -1566,6 +1548,7 @@ screen_write_collect_flush(struct screen_write_ctx *ctx, int scroll_only, TAILQ_FOREACH_SAFE(ci, &cl->items, entry, tmp) { screen_write_set_cursor(ctx, ci->x, y); if (ci->type == CLEAR_END) { + log_debug("XXX %u %u", ci->x, ci->bg); screen_write_initctx(ctx, &ttyctx, 1); ttyctx.bg = ci->bg; tty_write(tty_cmd_clearendofline, &ttyctx);