diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/api/vim.c | 20 | ||||
-rw-r--r-- | src/nvim/eval.c | 2 |
2 files changed, 16 insertions, 6 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index addcbf62e9..fc1307090d 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -49,8 +49,10 @@ void vim_command(String str, Error *err) /// /// @param keys to be typed /// @param mode specifies the mapping options +/// @param escape_csi the string needs escaping for K_SPECIAL/CSI bytes /// @see feedkeys() -void vim_feedkeys(String keys, String mode) +/// @see vim_strsave_escape_csi +void vim_feedkeys(String keys, String mode, Boolean escape_csi) FUNC_ATTR_DEFERRED { bool remap = true; @@ -68,12 +70,20 @@ void vim_feedkeys(String keys, String mode) } } - /* Need to escape K_SPECIAL and CSI before putting the string in the - * typeahead buffer. */ - char *keys_esc = (char *)vim_strsave_escape_csi((char_u *)keys.data); + char *keys_esc; + if (escape_csi) { + // Need to escape K_SPECIAL and CSI before putting the string in the + // typeahead buffer. + keys_esc = (char *)vim_strsave_escape_csi((char_u *)keys.data); + } else { + keys_esc = keys.data; + } ins_typebuf((char_u *)keys_esc, (remap ? REMAP_YES : REMAP_NONE), typebuf.tb_len, !typed, false); - free(keys_esc); + + if (escape_csi) { + free(keys_esc); + } if (vgetc_busy) typebuf_was_filled = true; diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 5975777261..4a77bcd3c5 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -8414,7 +8414,7 @@ static void f_feedkeys(typval_T *argvars, typval_T *rettv) } vim_feedkeys(cstr_as_string((char *)keys), - cstr_as_string((char *)flags)); + cstr_as_string((char *)flags), true); } } |