diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-09-09 17:51:02 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2023-09-09 17:53:01 +0800 |
commit | bc09fc04b8ef216bafa34792c3486a750e5c8bb3 (patch) | |
tree | bd4371553df03bdad3ba037e7bbcd785d6c92745 | |
parent | b7734c4ec84f0de14fcf86cfacefbed8a3ecf600 (diff) | |
download | rneovim-bc09fc04b8ef216bafa34792c3486a750e5c8bb3.tar.gz rneovim-bc09fc04b8ef216bafa34792c3486a750e5c8bb3.tar.bz2 rneovim-bc09fc04b8ef216bafa34792c3486a750e5c8bb3.zip |
vim-patch:9.0.1877: missing test for patch 9.0.1873
Problem: missing test for patch 9.0.1873
Solution: add a test trying to exchange windows
Add a test, making sure that switching windows is not allowed when
textlock is active, e.g. when running `:s/<pat>/\=func()/`
https://github.com/vim/vim/commit/18d2709aa12ffa3f6ae1a13059990558c5f8e406
Co-authored-by: Christian Brabandt <cb@256bit.org>
-rw-r--r-- | src/nvim/ex_cmds.c | 4 | ||||
-rw-r--r-- | src/nvim/window.c | 4 | ||||
-rw-r--r-- | test/old/testdir/test_substitute.vim | 14 |
3 files changed, 22 insertions, 0 deletions
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index a0618ce7d7..4f6b8f2c8f 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -3888,6 +3888,10 @@ static int do_sub(exarg_T *eap, const proftime_T timeout, const long cmdpreview_ nmatch = curbuf->b_ml.ml_line_count - sub_firstlnum + 1; current_match.end.lnum = sub_firstlnum + (linenr_T)nmatch; skip_match = true; + // safety check + if (nmatch < 0) { + goto skip; + } } // Save the line numbers for the preview buffer diff --git a/src/nvim/window.c b/src/nvim/window.c index e72c32700d..9d804ecae7 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -1884,6 +1884,10 @@ static void win_exchange(int Prenum) beep_flush(); return; } + if (text_or_buf_locked()) { + beep_flush(); + return; + } frame_T *frp; diff --git a/test/old/testdir/test_substitute.vim b/test/old/testdir/test_substitute.vim index a6640aac30..0d59697b3a 100644 --- a/test/old/testdir/test_substitute.vim +++ b/test/old/testdir/test_substitute.vim @@ -1425,4 +1425,18 @@ func Test_z_substitute_expr_leak() delfunc SubExpr endfunc +func Test_substitute_expr_switch_win() + func R() + wincmd x + return 'XXXX' + endfunc + new Xfoobar + let bufnr = bufnr('%') + put ="abcdef" + silent! s/\%')/\=R() + call assert_fails(':%s/./\=R()/g', 'E565') + delfunc R + exe bufnr .. "bw!" +endfunc + " vim: shiftwidth=2 sts=2 expandtab |