aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/api/vim.c
diff options
context:
space:
mode:
authorRui Abreu Ferreira <raf-ep@gmx.com>2014-10-08 14:04:27 +0100
committerThiago de Arruda <tpadilha84@gmail.com>2014-11-27 08:33:53 -0300
commite644369f6e67b6520e9c55026f8671985d70c166 (patch)
tree173cea6bcb535f2d75c51c1bca9ca8747abeb59d /src/nvim/api/vim.c
parenta6b7b924311eafd80f5983fdbea67842b0e169b4 (diff)
downloadrneovim-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.c20
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;