diff options
Diffstat (limited to 'src/eval.c')
-rw-r--r-- | src/eval.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/eval.c b/src/eval.c index 825a606a7..548c50b34 100644 --- a/src/eval.c +++ b/src/eval.c @@ -11839,24 +11839,25 @@ f_feedkeys(typval_T *argvars, typval_T *rettv UNUSED) return; keys = get_tv_string(&argvars[0]); - if (*keys != NUL) + + if (argvars[1].v_type != VAR_UNKNOWN) { - if (argvars[1].v_type != VAR_UNKNOWN) + flags = get_tv_string_buf(&argvars[1], nbuf); + for ( ; *flags != NUL; ++flags) { - flags = get_tv_string_buf(&argvars[1], nbuf); - for ( ; *flags != NUL; ++flags) + switch (*flags) { - switch (*flags) - { - case 'n': remap = FALSE; break; - case 'm': remap = TRUE; break; - case 't': typed = TRUE; break; - case 'i': insert = TRUE; break; - case 'x': execute = TRUE; break; - } + case 'n': remap = FALSE; break; + case 'm': remap = TRUE; break; + case 't': typed = TRUE; break; + case 'i': insert = TRUE; break; + case 'x': execute = TRUE; break; } } + } + if (*keys != NUL || execute) + { /* Need to escape K_SPECIAL and CSI before putting the string in the * typeahead buffer. */ keys_esc = vim_strsave_escape_csi(keys); |