Problem: Ctrl-R mapping not triggered during completion.
Solution: Move Ctrl-R check out of vim_is_ctrl_x_key()
(zeertzjq).
fixes: #20004
closes: #20006
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
int
vim_is_ctrl_x_key(int c)
{
- // Always allow ^R - let its results then be checked
- if (c == Ctrl_R && ctrl_x_mode != CTRL_X_REGISTER)
- return TRUE;
-
// Accept <PageUp> and <PageDown> if the popup menu is visible.
if (ins_compl_pum_key(c))
return TRUE;
else if (ctrl_x_mode_not_default())
{
// We're already in CTRL-X mode, do we stay in it?
- if (!vim_is_ctrl_x_key(c))
+ if (c != Ctrl_R && !vim_is_ctrl_x_key(c))
{
ctrl_x_mode = ctrl_x_mode_scroll() ? CTRL_X_NORMAL : CTRL_X_FINISHED;
edit_submode = NULL;
// reset continue_* if we left expansion-mode, if we stay they'll be
// (re)set properly in ins_complete()
- if (!vim_is_ctrl_x_key(c))
+ if (c != Ctrl_R && !vim_is_ctrl_x_key(c))
{
compl_cont_status = 0;
compl_cont_mode = 0;
call test_override("char_avail", 0)
endfunc
+func Test_completion_with_mapped_ctrl_r()
+ new
+ let b:n = 0
+ let @a = 'AABBCCDDEE'
+ " Ctrl-R mapping is triggered
+ inoremap <buffer> <C-R> <Cmd>let b:n += 1<CR>
+ inoremap <buffer> <F2> <Cmd>call complete(col('.'), [])<CR>
+ call feedkeys("i\<F2>\<*C-R>abcde\<Esc>", 'tx')
+ call assert_equal(1, b:n)
+ call assert_equal('abcde', getline('.'))
+
+ " Ctrl-X Ctrl-R still works with Ctrl-R mapped
+ call feedkeys("ccAAB\<*C-X>\<*C-R>\<*C-Y>\<Esc>", 'tx')
+ call assert_equal(1, b:n)
+ call assert_equal('AABBCCDDEE', getline('.'))
+
+ let @a = ''
+ bwipe!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab nofoldenable
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 373,
/**/
372,
/**/