diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2017-10-09 18:53:29 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2017-10-09 18:53:29 +0100 |
commit | 4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch) | |
tree | ba5f07bf3f9d22d82e54a462313f5d244036c768 /app-misc/tmux/files/tmux-2.3-screen_write_copy-fix.patch |
reinit the tree, so we can have metadata
Diffstat (limited to 'app-misc/tmux/files/tmux-2.3-screen_write_copy-fix.patch')
-rw-r--r-- | app-misc/tmux/files/tmux-2.3-screen_write_copy-fix.patch | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/app-misc/tmux/files/tmux-2.3-screen_write_copy-fix.patch b/app-misc/tmux/files/tmux-2.3-screen_write_copy-fix.patch new file mode 100644 index 000000000000..b8383274da2a --- /dev/null +++ b/app-misc/tmux/files/tmux-2.3-screen_write_copy-fix.patch @@ -0,0 +1,63 @@ +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); + } |