You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/app-misc/tmux/files/tmux-2.3-screen_write_copy-...

64 lines
1.9 KiB

From 30086e504c8a5389b96b72b81ac8dbefe19e0cf1 Mon Sep 17 00:00:00 2001
From: nicm <nicm>
Date: Wed, 5 Oct 2016 22:00:29 +0000
Subject: [PATCH] screen_write_copy tried to be clever and clear the line if it
reached the end of the source, but it was wrong and causes problems that are
only showing up now we are more aggressive about skipping redundant screen
updates. Remove the optimization entirely as more trouble than it is worth to
fix (and it'll have to go when BCE is done anyway).
---
screen-write.c | 34 +++++++---------------------------
1 file changed, 7 insertions(+), 27 deletions(-)
diff --git a/screen-write.c b/screen-write.c
index 3977517..3a1fc8c 100644
--- a/screen-write.c
+++ b/screen-write.c
@@ -394,38 +394,18 @@ screen_write_copy(struct screen_write_ctx *ctx, struct screen *src, u_int px,
{
struct screen *s = ctx->s;
struct grid *gd = src->grid;
- struct grid_line *gl;
struct grid_cell gc;
- u_int xx, yy, cx, cy, ax, bx;
+ u_int xx, yy, cx, cy;
cx = s->cx;
cy = s->cy;
+
for (yy = py; yy < py + ny; yy++) {
- gl = &gd->linedata[yy];
- if (yy < gd->hsize + gd->sy) {
- /*
- * Find start and end position and copy between
- * them. Limit to the real end of the line then use a
- * clear EOL only if copying to the end, otherwise
- * could overwrite whatever is there already.
- */
- if (px > gl->cellsize)
- ax = gl->cellsize;
- else
- ax = px;
- if (px + nx == gd->sx && px + nx > gl->cellsize)
- bx = gl->cellsize;
- else
- bx = px + nx;
-
- for (xx = ax; xx < bx; xx++) {
- grid_get_cell(gd, xx, yy, &gc);
- screen_write_cell(ctx, &gc);
- }
- if (px + nx == gd->sx && px + nx > gl->cellsize)
- screen_write_clearendofline(ctx);
- } else
- screen_write_clearline(ctx);
+ for (xx = px; xx < px + nx; xx++) {
+ grid_get_cell(gd, xx, yy, &gc);
+ screen_write_cell(ctx, &gc);
+ }
+
cy++;
screen_write_cursormove(ctx, cx, cy);
}