From 9f2335937e7ecb59daf1bb8c4b3706ef8e3fea70 Mon Sep 17 00:00:00 2001 From: Michael Lingelbach Date: Tue, 5 Jan 2021 03:20:20 -0800 Subject: [PATCH 1/2] fix_cursor: do not change line number when edit will not impact cursor row --- src/nvim/api/buffer.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c index 67f4f92bf6..a83b0ea859 100644 --- a/src/nvim/api/buffer.c +++ b/src/nvim/api/buffer.c @@ -1918,7 +1918,6 @@ static void fix_cursor(linenr_T lo, linenr_T hi, linenr_T extra) curwin->w_cursor.lnum += extra; check_cursor_col(); } else if (extra < 0) { - curwin->w_cursor.lnum = lo; check_cursor(); } else { check_cursor_col(); From 563d7b694bc89782c83f6c8ffee2a80d9fdbaabc Mon Sep 17 00:00:00 2001 From: Michael Lingelbach Date: Sun, 31 Jan 2021 09:03:50 -0800 Subject: [PATCH 2/2] tests: add test for cursor postion when deleting buffer lines --- test/functional/lua/buffer_updates_spec.lua | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/functional/lua/buffer_updates_spec.lua b/test/functional/lua/buffer_updates_spec.lua index 67dc5f5a16..680b74873d 100644 --- a/test/functional/lua/buffer_updates_spec.lua +++ b/test/functional/lua/buffer_updates_spec.lua @@ -225,6 +225,14 @@ describe('lua buffer event callbacks: on_lines', function() eq(1, meths.get_var('listener_cursor_line')) end) + it('has valid cursor position while deleting lines', function() + meths.buf_set_lines(0, 0, -1, true, { "line_1", "line_2", "line_3", "line_4"}) + meths.win_set_cursor(0, {2, 0}) + eq(2, meths.win_get_cursor(0)[1]) + meths.buf_set_lines(0, 0, -1, true, { "line_1", "line_2", "line_3"}) + eq(2, meths.win_get_cursor(0)[1]) + end) + it('does not SEGFAULT when calling win_findbuf in on_detach', function() exec_lua[[