aboutsummaryrefslogtreecommitdiff
path: root/screen.c
diff options
context:
space:
mode:
authornicm <nicm>2019-04-02 08:45:32 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2019-04-02 11:11:12 +0100
commitbbcfee362fdf8d39501131d3a3f8739dacd5c66e (patch)
tree99986b5225c75ef6a274f4ba71fcdb3d0f01cdae /screen.c
parent6d071c468cbed78426eebdaab0639dac873cd39f (diff)
downloadrtmux-bbcfee362fdf8d39501131d3a3f8739dacd5c66e.tar.gz
rtmux-bbcfee362fdf8d39501131d3a3f8739dacd5c66e.tar.bz2
rtmux-bbcfee362fdf8d39501131d3a3f8739dacd5c66e.zip
Store and restore cursor across reflow by working out a position based
on unwrapped lines, rather than a grid offset. Fixes problems reported by Thomas Sattler and Paul de Weerd.
Diffstat (limited to 'screen.c')
-rw-r--r--screen.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/screen.c b/screen.c
index eae5fb12..9b67e7e8 100644
--- a/screen.c
+++ b/screen.c
@@ -463,17 +463,17 @@ screen_select_cell(struct screen *s, struct grid_cell *dst,
static void
screen_reflow(struct screen *s, u_int new_x)
{
- u_int offset, cx = s->cx, cy = s->grid->hsize + s->cy;
+ u_int cx = s->cx, cy = s->grid->hsize + s->cy, wx, wy;
struct timeval start, tv;
gettimeofday(&start, NULL);
- offset = grid_to_offset(s->grid, cx, cy);
- log_debug("%s: cursor %u,%u offset is %u", __func__, cx, cy, offset);
+ grid_wrap_position(s->grid, cx, cy, &wx, &wy);
+ log_debug("%s: cursor %u,%u is %u,%u", __func__, cx, cy, wx, wy);
grid_reflow(s->grid, new_x);
- grid_from_offset(s->grid, offset, &cx, &cy);
+ grid_unwrap_position(s->grid, &cx, &cy, wx, wy);
log_debug("%s: new cursor is %u,%u", __func__, cx, cy);
if (cy >= s->grid->hsize) {