aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Dewar <seandewar@users.noreply.github.com>2022-01-07 17:27:47 +0000
committerSean Dewar <seandewar@users.noreply.github.com>2022-02-03 15:03:08 +0000
commitd984a8d130c2063dcd33ae52f98c22fe3567cd18 (patch)
tree371a5b81baab7cccc4986502a7c2fe3f2b10cb35
parentf326c9a77da3aef052ce6af0f851344f2479c844 (diff)
downloadrneovim-d984a8d130c2063dcd33ae52f98c22fe3567cd18.tar.gz
rneovim-d984a8d130c2063dcd33ae52f98c22fe3567cd18.tar.bz2
rneovim-d984a8d130c2063dcd33ae52f98c22fe3567cd18.zip
vim-patch:8.2.4026: ml_get error with specific win_execute() command
Problem: ml_get error with specific win_execute() command. (Sean Dewar) Solution: Check cursor and Visual area are OK. https://github.com/vim/vim/commit/e664a327014f4aa8baf8549a34a4caab2f3116a3
-rw-r--r--src/nvim/eval/funcs.c7
-rw-r--r--src/nvim/testdir/test_execute_func.vim15
2 files changed, 22 insertions, 0 deletions
diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c
index 3cfc00fea2..b16041b832 100644
--- a/src/nvim/eval/funcs.c
+++ b/src/nvim/eval/funcs.c
@@ -2193,6 +2193,13 @@ static void f_win_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr)
if (win_valid(wp) && !equalpos(curpos, wp->w_cursor)) {
wp->w_redr_status = true;
}
+
+ // In case the command moved the cursor or changed the Visual area,
+ // check it is valid.
+ check_cursor();
+ if (VIsual_active) {
+ check_pos(curbuf, &VIsual);
+ }
}
}
diff --git a/src/nvim/testdir/test_execute_func.vim b/src/nvim/testdir/test_execute_func.vim
index bb601e19ac..16cc20e9a7 100644
--- a/src/nvim/testdir/test_execute_func.vim
+++ b/src/nvim/testdir/test_execute_func.vim
@@ -152,8 +152,23 @@ func Test_win_execute_visual_redraw()
call setline(1, ['a', 'b', 'c'])
new
wincmd p
+ " start Visual in current window, redraw in other window with fewer lines
call feedkeys("G\<C-V>", 'txn')
call win_execute(winnr('#')->win_getid(), 'redraw')
+ call feedkeys("\<Esc>", 'txn')
+ bwipe!
+ bwipe!
+
+ enew
+ new
+ call setline(1, ['a', 'b', 'c'])
+ let winid = win_getid()
+ wincmd p
+ " start Visual in current window, extend it in other window with more lines
+ call feedkeys("\<C-V>", 'txn')
+ call win_execute(winid, 'call feedkeys("G\<C-V>", ''txn'')')
+ redraw
+
bwipe!
bwipe!
endfunc