diff options
-rw-r--r-- | src/nvim/api/vim.c | 8 | ||||
-rw-r--r-- | src/nvim/ex_docmd.c | 5 | ||||
-rw-r--r-- | src/nvim/getchar.c | 4 | ||||
-rw-r--r-- | src/nvim/testdir/test_langmap.vim | 48 | ||||
-rw-r--r-- | src/nvim/version.c | 2 |
5 files changed, 38 insertions, 29 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index 46d72b847d..43d58a539a 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -57,6 +57,7 @@ void vim_feedkeys(String keys, String mode, Boolean escape_csi) bool remap = true; bool insert = false; bool typed = false; + bool execute = false; if (keys.size == 0) { return; @@ -68,6 +69,7 @@ void vim_feedkeys(String keys, String mode, Boolean escape_csi) case 'm': remap = true; break; case 't': typed = true; break; case 'i': insert = true; break; + case 'x': execute = true; break; } } @@ -86,8 +88,12 @@ void vim_feedkeys(String keys, String mode, Boolean escape_csi) xfree(keys_esc); } - if (vgetc_busy) + if (vgetc_busy) { typebuf_was_filled = true; + } + if (execute) { + exec_normal(true); + } } /// Passes input keys to Neovim. Unlike `vim_feedkeys`, this will use a diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index c0d5c37bc9..3f28435ec0 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -7863,7 +7863,10 @@ void exec_normal_cmd(char_u *cmd, int remap, bool silent) exec_normal(false); } -void exec_normal(int was_typed) +/// Execute normal_cmd() until there is no typeahead left. +/// +/// @param was_typed whether or not something was typed +void exec_normal(bool was_typed) { oparg_T oa; diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c index 36fe393f18..ae1857f318 100644 --- a/src/nvim/getchar.c +++ b/src/nvim/getchar.c @@ -1754,9 +1754,9 @@ static int vgetorpeek(int advance) || ((compl_cont_status & CONT_LOCAL) && (c1 == Ctrl_N || c1 == Ctrl_P))) ) { - if (c1 == K_SPECIAL) + if (c1 == K_SPECIAL) { nolmaplen = 2; - else { + } else { LANGMAP_ADJUST(c1, (State & (CMDLINE | INSERT)) == 0 && get_real_state() != SELECTMODE); nolmaplen = 0; diff --git a/src/nvim/testdir/test_langmap.vim b/src/nvim/testdir/test_langmap.vim index fc7c6734b1..066c3bf2bd 100644 --- a/src/nvim/testdir/test_langmap.vim +++ b/src/nvim/testdir/test_langmap.vim @@ -1,24 +1,24 @@ -" tests for 'langmap'
-
-func Test_langmap()
- new
- set langmap=}l,^x,%v
-
- call setline(1, ['abc'])
- call feedkeys('gg0}^', 'tx')
- call assert_equal('ac', getline(1))
-
- " in Replace mode
- " need silent! to avoid a delay when entering Insert mode
- call setline(1, ['abcde'])
- silent! call feedkeys("gg0lR%{z\<Esc>00", 'tx')
- call assert_equal('a%{ze', getline(1))
-
- " in Select mode
- " need silent! to avoid a delay when entering Insert mode
- call setline(1, ['abcde'])
- silent! call feedkeys("gg0}%}\<C-G>}^\<Esc>00", 'tx')
- call assert_equal('a}^de', getline(1))
-
- quit!
-endfunc
+" tests for 'langmap' + +func Test_langmap() + new + set langmap=}l,^x,%v + + call setline(1, ['abc']) + call feedkeys('gg0}^', 'tx') + call assert_equal('ac', getline(1)) + + " in Replace mode + " need silent! to avoid a delay when entering Insert mode + call setline(1, ['abcde']) + silent! call feedkeys("gg0lR%{z\<Esc>00", 'tx') + call assert_equal('a%{ze', getline(1)) + + " in Select mode + " need silent! to avoid a delay when entering Insert mode + call setline(1, ['abcde']) + silent! call feedkeys("gg0}%}\<C-G>}^\<Esc>00", 'tx') + call assert_equal('a}^de', getline(1)) + + quit! +endfunc diff --git a/src/nvim/version.c b/src/nvim/version.c index b354c2eaeb..99bf21466d 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -542,7 +542,7 @@ static int included_patches[] = { // 1154 NA // 1153, // 1152 NA - // 1151, + 1151, 1150, 1149, // 1148 NA |