From 1fe936dbbcac8e01a88995104c0f5b645d76c61f Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 25 Feb 2018 09:15:48 +0530 Subject: [PATCH] Fix off by one when restoring cursor position after resize. Fixes #344 --- kitty/rewrap.h | 2 +- kitty_tests/screen.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/kitty/rewrap.h b/kitty/rewrap.h index c10aa3176..ce82543ea 100644 --- a/kitty/rewrap.h +++ b/kitty/rewrap.h @@ -70,7 +70,7 @@ rewrap_inner(BufType *src, BufType *dest, const index_type src_limit, HistoryBuf copy_range(src->line, src_x, dest->line, dest_x, num); if (is_tracked_line && src_x <= *track_x && *track_x < src_x + num) { *track_y = dest_y; - *track_x = dest_x + (*track_x - src_x); + *track_x = dest_x + (*track_x - src_x + 1); } src_x += num; dest_x += num; } diff --git a/kitty_tests/screen.py b/kitty_tests/screen.py index 787d94021..0570fdcf0 100644 --- a/kitty_tests/screen.py +++ b/kitty_tests/screen.py @@ -245,6 +245,12 @@ class TestScreen(BaseTest): y = s.cursor.y self.assertIn('|', str(s.line(y))) + s = self.create_screen() + draw('a') + x_before = s.cursor.x + s.resize(s.lines - 1, s.columns) + self.ae(x_before, s.cursor.x) + def test_tab_stops(self): # Taken from vttest/main.c s = self.create_screen(cols=80, lines=2)