From 92403697746a3ebaeb4ad267da2c7eb9c0e7b0bb Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Mon, 28 Apr 2025 18:04:00 +0200 Subject: [PATCH] patch 9.1.1351: Return value of getcmdline() inconsistent in CmdlineLeavePre Problem: Return value of getcmdline() inconsistent in CmdlineLeavePre when leaving cmdline in different ways (after v9.1.1329). Solution: Trigger CmdlineLeavePre before calling abandon_cmdline() so that getcmdline() can return the command line (zeertzjq). closes: #17218 Signed-off-by: zeertzjq Signed-off-by: Girish Palya Signed-off-by: Christian Brabandt --- src/ex_getln.c | 7 +++---- src/testdir/test_autocmd.vim | 27 ++++++++++++++++++++++----- src/version.c | 2 ++ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/ex_getln.c b/src/ex_getln.c index 24ff7a9089..bbfe1e593e 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -2560,6 +2560,9 @@ cmdline_changed: } returncmd: + // Trigger CmdlineLeavePre autocommands if not already triggered. + if (!event_cmdlineleavepre_triggered) + trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINELEAVEPRE); #ifdef FEAT_RIGHTLEFT cmdmsg_rl = FALSE; @@ -2616,10 +2619,6 @@ returncmd: if (some_key_typed) need_wait_return = FALSE; - // Trigger CmdlineLeavePre autocommands if not already triggered. - if (!event_cmdlineleavepre_triggered) - trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINELEAVEPRE); - // Trigger CmdlineLeave autocommands. trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINELEAVE); diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim index ae69dd62a7..a2e365d23c 100644 --- a/src/testdir/test_autocmd.vim +++ b/src/testdir/test_autocmd.vim @@ -2066,11 +2066,28 @@ func Test_Cmdline_Trigger() call assert_equal('CmdlineLeavePre', g:log) call assert_equal('CmdlineLeave', g:log2) - let g:count = 0 - autocmd CmdlineLeavePre * let g:count += 1 - call feedkeys(":let c = input('? ')\B\", "tx") - call assert_equal(2, g:count) - unlet! g:count + autocmd CmdlineLeavePre * let g:cmdline += [getcmdline()] + + for end_keys in ["\", "\", "\", "\", "\", + \ "\\", "\\"] + let g:cmdline = [] + let g:log = '' + let g:log2 = '' + call assert_equal('', g:log) + let keys = $':echo "hello"{end_keys}' + let msg = keytrans(keys) + call feedkeys(keys, "tx") + call assert_equal(['echo "hello"'], g:cmdline, msg) + call assert_equal('CmdlineLeavePre', g:log, msg) + call assert_equal('CmdlineLeave', g:log2, msg) + endfor + + let g:cmdline = [] + call feedkeys(":let c = input('? ')\ABCDE\", "tx") + call assert_equal(["let c = input('? ')", 'ABCDE'], g:cmdline) + + au! CmdlineLeavePre + unlet! g:cmdline unlet! g:log unlet! g:log2 bw! diff --git a/src/version.c b/src/version.c index a18ffced7e..ac424bca38 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1351, /**/ 1350, /**/