diff options
author | Rui Abreu Ferreira <raf-ep@gmx.com> | 2014-10-08 14:04:27 +0100 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-11-27 08:33:53 -0300 |
commit | e644369f6e67b6520e9c55026f8671985d70c166 (patch) | |
tree | 173cea6bcb535f2d75c51c1bca9ca8747abeb59d /src/nvim/api/vim.c | |
parent | a6b7b924311eafd80f5983fdbea67842b0e169b4 (diff) | |
download | rneovim-e644369f6e67b6520e9c55026f8671985d70c166.tar.gz rneovim-e644369f6e67b6520e9c55026f8671985d70c166.tar.bz2 rneovim-e644369f6e67b6520e9c55026f8671985d70c166.zip |
Add Boolean argument escape_csi to vim_feedkeys
- By default vim_feedkeys escaped all input for CSI/K_SPECIAL bytes
before using it. However since vim_replace_termcodes() also escapes
the input string chaining these functions together escapes input twice
- vim_feedkeys() now takes a third Boolean argument to enable/disable
escaping
- Breaks API compatibility
Diffstat (limited to 'src/nvim/api/vim.c')
-rw-r--r-- | src/nvim/api/vim.c | 20 |
1 files changed, 15 insertions, 5 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; |