aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/api/vim.c8
-rw-r--r--src/nvim/ex_docmd.c5
-rw-r--r--src/nvim/getchar.c4
-rw-r--r--src/nvim/testdir/test_langmap.vim48
-rw-r--r--src/nvim/version.c2
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