aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornicm <nicm>2020-04-17 14:06:42 +0000
committernicm <nicm>2020-04-17 14:06:42 +0000
commit282a7a8d96877d4063fe16c5fbba03d95bc35008 (patch)
treea85b9492967d3710da1e41a8c061e31cc8ff11f3
parent7f2925a01de5da0416dd2589ee080f61650f2da9 (diff)
downloadrtmux-282a7a8d96877d4063fe16c5fbba03d95bc35008.tar.gz
rtmux-282a7a8d96877d4063fe16c5fbba03d95bc35008.tar.bz2
rtmux-282a7a8d96877d4063fe16c5fbba03d95bc35008.zip
Make sure the cursor position is still on screen after we have trimmed
empty lines. Also improve some log messages.
-rw-r--r--screen.c7
-rw-r--r--tmux.h2
-rw-r--r--window-copy.c12
3 files changed, 16 insertions, 5 deletions
diff --git a/screen.c b/screen.c
index ff8b1d2e..d9d1aa09 100644
--- a/screen.c
+++ b/screen.c
@@ -230,7 +230,9 @@ screen_resize_cursor(struct screen *s, u_int sx, u_int sy, int reflow,
cy = &tcy;
*cy = s->grid->hsize + s->cy;
- log_debug("%s: start %u,%u (%u,%u)", __func__, s->cx, s->cy, *cx, *cy);
+ log_debug("%s: new size %ux%u, now %ux%u (cursor %u,%u = %u,%u)",
+ __func__, sx, sy, screen_size_x(s), screen_size_y(s), s->cx, s->cy,
+ *cx, *cy);
if (sx < 1)
sx = 1;
@@ -256,7 +258,8 @@ screen_resize_cursor(struct screen *s, u_int sx, u_int sy, int reflow,
s->cx = 0;
s->cy = 0;
}
- log_debug("%s: finish %u,%u (%u,%u)", __func__, s->cx, s->cy, *cx, *cy);
+ log_debug("%s: cursor finished at %u,%u = %u,%u", __func__, s->cx,
+ s->cy, *cx, *cy);
}
/* Resize screen. */
diff --git a/tmux.h b/tmux.h
index a5dead04..b791f5af 100644
--- a/tmux.h
+++ b/tmux.h
@@ -79,7 +79,7 @@ struct winlink;
#define NAME_INTERVAL 500000
/* Maximum size of data to hold from a pane. */
-#define READ_SIZE 4096
+#define READ_SIZE 8192
/* Default pixel cell sizes. */
#define DEFAULT_XPIXEL 16
diff --git a/window-copy.c b/window-copy.c
index bdf2c148..45a47675 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -314,14 +314,22 @@ window_copy_clone_screen(struct screen *src, struct screen *hint, u_int *cx,
break;
sy--;
}
+ log_debug("%s: target screen is %ux%u, source %ux%u", __func__,
+ screen_size_x(src), sy, screen_size_x(hint),
+ screen_hsize(src) + screen_size_y(src));
screen_init(dst, screen_size_x(src), sy, screen_hlimit(src));
grid_duplicate_lines(dst->grid, 0, src->grid, 0, sy);
dst->grid->sy = sy - screen_hsize(src);
dst->grid->hsize = screen_hsize(src);
dst->grid->hscrolled = src->grid->hscrolled;
- dst->cx = src->cx;
- dst->cy = src->cy;
+ if (src->cy > dst->grid->sy - 1) {
+ dst->cx = 0;
+ dst->cy = dst->grid->sy - 1;
+ } else {
+ dst->cx = src->cx;
+ dst->cy = src->cy;
+ }
screen_resize_cursor(dst, screen_size_x(hint), screen_size_y(hint), 1,
0, cx, cy);