aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-02-15 20:35:48 +0800
committerGitHub <noreply@github.com>2022-02-15 20:35:48 +0800
commit8cc881e4f4c2edc185067f6ec9ff78f6a79a4fd0 (patch)
treea88787d0ef07dd9e0bda553293221cfe6b97e355
parente29ba986f588eb58e3c9e2a9717b599e8ab347d2 (diff)
parent6eec30ccfc09f0ea45c9ef86a77ca92a5fc4a1b9 (diff)
downloadrneovim-8cc881e4f4c2edc185067f6ec9ff78f6a79a4fd0.tar.gz
rneovim-8cc881e4f4c2edc185067f6ec9ff78f6a79a4fd0.tar.bz2
rneovim-8cc881e4f4c2edc185067f6ec9ff78f6a79a4fd0.zip
Merge pull request #17412 from zeertzjq/vim-8.2.4154
vim-patch:8.2.4154: ml_get error when exchanging windows in Visual mode
-rw-r--r--src/nvim/testdir/test_visual.vim10
-rw-r--r--src/nvim/window.c6
2 files changed, 16 insertions, 0 deletions
diff --git a/src/nvim/testdir/test_visual.vim b/src/nvim/testdir/test_visual.vim
index 04c7db38ef..4650d4e3df 100644
--- a/src/nvim/testdir/test_visual.vim
+++ b/src/nvim/testdir/test_visual.vim
@@ -1280,6 +1280,16 @@ func Test_visual_block_insert_round_off()
bwipe!
endfunc
+" this was causing an ml_get error
+func Test_visual_exchange_windows()
+ enew!
+ new
+ call setline(1, ['foo', 'bar'])
+ exe "normal G\<C-V>gg\<C-W>\<C-X>OO\<Esc>"
+ bwipe!
+ bwipe!
+endfunc
+
" this was leaving the end of the Visual area beyond the end of a line
func Test_visual_ex_copy_line()
new
diff --git a/src/nvim/window.c b/src/nvim/window.c
index e09af7a7bb..1e737d2083 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -1727,6 +1727,12 @@ static void win_exchange(long Prenum)
(void)win_comp_pos(); // recompute window positions
+ if (wp->w_buffer != curbuf) {
+ reset_VIsual_and_resel();
+ } else if (VIsual_active) {
+ wp->w_cursor = curwin->w_cursor;
+ }
+
win_enter(wp, true);
redraw_later(curwin, NOT_VALID);
redraw_later(wp, NOT_VALID);