diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-04-11 19:38:56 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-04-11 19:38:56 +0100 |
commit | 11a57dfd16a47f248fe949344bd5db3f12b9bd32 (patch) | |
tree | 4830851e182451df3a7e3a6b1b6bc5316cfa60f4 | |
parent | 1655619717ff109ea8bf1002883636d5af345e48 (diff) | |
download | vim-git-11a57dfd16a47f248fe949344bd5db3f12b9bd32.tar.gz |
patch 8.2.4738: Esc on commandline executes command instead of abandoning itv8.2.4738
Problem: Esc on commandline executes command instead of abandoning it.
Solution: Save and restore KeyTyped when removing the popup menu.
(closes #10154)
-rw-r--r-- | src/cmdexpand.c | 5 | ||||
-rw-r--r-- | src/testdir/dumps/Test_wildmenu_with_pum_foldexpr_1.dump | 10 | ||||
-rw-r--r-- | src/testdir/dumps/Test_wildmenu_with_pum_foldexpr_2.dump | 10 | ||||
-rw-r--r-- | src/testdir/test_cmdline.vim | 23 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 50 insertions, 0 deletions
diff --git a/src/cmdexpand.c b/src/cmdexpand.c index 9bcea7e8d..87953375d 100644 --- a/src/cmdexpand.c +++ b/src/cmdexpand.c @@ -378,6 +378,7 @@ int cmdline_pum_active(void) void cmdline_pum_remove(void) { int save_p_lz = p_lz; + int save_KeyTyped = KeyTyped; pum_undisplay(); VIM_CLEAR(compl_match_array); @@ -385,6 +386,10 @@ void cmdline_pum_remove(void) update_screen(0); p_lz = save_p_lz; redrawcmd(); + + // When a function is called (e.g. for 'foldtext') KeyTyped might be reset + // as a side effect. + KeyTyped = save_KeyTyped; } void cmdline_pum_cleanup(cmdline_info_T *cclp) diff --git a/src/testdir/dumps/Test_wildmenu_with_pum_foldexpr_1.dump b/src/testdir/dumps/Test_wildmenu_with_pum_foldexpr_1.dump new file mode 100644 index 000000000..ad570677a --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_with_pum_foldexpr_1.dump @@ -0,0 +1,10 @@ +|f+0#0000e05#a8a8a8255|o@1|-@71 +|s+0#0000000#ffffff0|o|m|e| |m|o|r|e| |t|e|x|t| @60 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +| +0#0000001#e0e0e08|s|e|t| @11| +0#4040ff13#ffffff0@58 +| +0#0000001#ffd7ff255|s|e|t|f|i|l|e|t|y|p|e| @3| +0#4040ff13#ffffff0@58 +| +0#0000001#ffd7ff255|s|e|t|g|l|o|b|a|l| @5| +0#4040ff13#ffffff0@58 +| +0#0000001#ffd7ff255|s|e|t|l|o|c|a|l| @6| +0#4040ff13#ffffff0@58 +|:+0#0000000&|s|e|t> @70 diff --git a/src/testdir/dumps/Test_wildmenu_with_pum_foldexpr_2.dump b/src/testdir/dumps/Test_wildmenu_with_pum_foldexpr_2.dump new file mode 100644 index 000000000..93270a586 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_with_pum_foldexpr_2.dump @@ -0,0 +1,10 @@ +>f+0#0000e05#a8a8a8255|o@1|-@71 +|s+0#0000000#ffffff0|o|m|e| |m|o|r|e| |t|e|x|t| @60 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|,|1| @10|A|l@1| diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim index 8034bdb3e..8baa1ac6f 100644 --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -2510,6 +2510,29 @@ func Test_wildmenumode_with_pum() cunmap <F2> endfunc +func Test_wildmenu_with_pum_foldexpr() + CheckRunVimInTerminal + + let lines =<< trim END + call setline(1, ['folded one', 'folded two', 'some more text']) + func MyFoldText() + return 'foo' + endfunc + set foldtext=MyFoldText() wildoptions=pum + normal ggzfj + END + call writefile(lines, 'Xpumfold') + let buf = RunVimInTerminal('-S Xpumfold', #{rows: 10}) + call term_sendkeys(buf, ":set\<Tab>") + call VerifyScreenDump(buf, 'Test_wildmenu_with_pum_foldexpr_1', {}) + + call term_sendkeys(buf, "\<Esc>") + call VerifyScreenDump(buf, 'Test_wildmenu_with_pum_foldexpr_2', {}) + + call StopVimInTerminal(buf) + call delete('Xpumfold') +endfunc + " Test for opening the cmdline completion popup menu from the terminal window. " The popup menu should be positioned correctly over the status line of the " bottom-most window. diff --git a/src/version.c b/src/version.c index f1199839d..27de4e52f 100644 --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4738, +/**/ 4737, /**/ 4736, |