diff options
author | Famiu Haque <famiuhaque@protonmail.com> | 2022-06-12 23:59:04 +0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-12 10:59:04 -0700 |
commit | 2de0d6714497e4259f467516e52852c1016d5318 (patch) | |
tree | 9de048c5eece4b0b7d66b9d0815da41c0ea02c35 | |
parent | f4967828f905fa055d0e69d48a7d735d7f967e1e (diff) | |
download | rneovim-2de0d6714497e4259f467516e52852c1016d5318.tar.gz rneovim-2de0d6714497e4259f467516e52852c1016d5318.tar.bz2 rneovim-2de0d6714497e4259f467516e52852c1016d5318.zip |
fix(inccommand): skip split window if not enough room #18937
Command preview now behaves like inccommand=nosplit when there's not
enough room for the preview window to be opened instead of aborting,
which is consistent with old behavior of 'inccommand'.
-rw-r--r-- | src/nvim/ex_getln.c | 17 | ||||
-rw-r--r-- | test/functional/ui/inccommand_spec.lua | 10 |
2 files changed, 14 insertions, 13 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 5bca6b5f81..94ce1ec495 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -2325,19 +2325,9 @@ static buf_T *cmdpreview_open_buf(void) static win_T *cmdpreview_open_win(buf_T *cmdpreview_buf) { win_T *save_curwin = curwin; - bool win_found = false; - // Try to find an existing preview window. - FOR_ALL_WINDOWS_IN_TAB(wp, curtab) { - if (wp->w_buffer == cmdpreview_buf) { - win_enter(wp, false); - win_found = true; - break; - } - } - - // If an existing window is not found, create one. - if (!win_found && win_split((int)p_cwh, WSP_BOT) == FAIL) { + // Open preview window. + if (win_split((int)p_cwh, WSP_BOT) == FAIL) { return NULL; } @@ -2459,7 +2449,8 @@ static void cmdpreview_show(CommandLineState *s) // If inccommand=split and preview callback returns 2, open preview window. if (icm_split && cmdpreview_type == 2 && (cmdpreview_win = cmdpreview_open_win(cmdpreview_buf)) == NULL) { - abort(); + // If there's not enough room to open the preview window, just preview without the window. + cmdpreview_type = 1; } // If preview callback is nonzero, update screen now. diff --git a/test/functional/ui/inccommand_spec.lua b/test/functional/ui/inccommand_spec.lua index b01504db4f..a310069636 100644 --- a/test/functional/ui/inccommand_spec.lua +++ b/test/functional/ui/inccommand_spec.lua @@ -2051,6 +2051,16 @@ describe("'inccommand' split windows", function() end end) + it("don't open if there's not enough room", function() + refresh() + screen:try_resize(40, 3) + feed("gg:%s/tw") + screen:expect([[ + Inc substitution on | + {12:tw}o lines | + :%s/tw^ | + ]]) + end) end) describe("'inccommand' with 'gdefault'", function() |