Mercurial > vim
changeset 6549:2561531decf1 v7.4.601
updated for version 7.4.601
Problem: It is not possible to have feedkeys() insert characters.
Solution: Add the 'i' flag.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Tue, 27 Jan 2015 15:19:24 +0100 |
parents | baca7442f505 |
children | 0a62a4203939 |
files | runtime/doc/eval.txt src/eval.c src/version.c |
diffstat | 3 files changed, 13 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -1,4 +1,4 @@ -*eval.txt* For Vim version 7.4. Last change: 2014 Dec 07 +*eval.txt* For Vim version 7.4. Last change: 2015 Jan 27 VIM REFERENCE MANUAL by Bram Moolenaar @@ -2965,9 +2965,12 @@ extend({expr1}, {expr2} [, {expr3}]) * feedkeys({string} [, {mode}]) *feedkeys()* Characters in {string} are queued for processing as if they - come from a mapping or were typed by the user. They are added - to the end of the typeahead buffer, thus if a mapping is still - being executed these characters come after them. + come from a mapping or were typed by the user. + By default the string is added to the end of the typeahead + buffer, thus if a mapping is still being executed the + characters come after them. Use the 'i' flag to insert before + other characters, they will be executed next, before any + characters from a mapping. The function does not wait for processing of keys contained in {string}. To include special keys into {string}, use double-quotes @@ -2981,6 +2984,7 @@ feedkeys({string} [, {mode}]) *feedke 't' Handle keys as if typed; otherwise they are handled as if coming from a mapping. This matters for undo, opening folds, etc. + 'i' Insert the string instead of appending (see above). Return value is always 0. filereadable({file}) *filereadable()*
--- a/src/eval.c +++ b/src/eval.c @@ -10500,6 +10500,7 @@ f_feedkeys(argvars, rettv) typval_T *rettv UNUSED; { int remap = TRUE; + int insert = FALSE; char_u *keys, *flags; char_u nbuf[NUMBUFLEN]; int typed = FALSE; @@ -10524,6 +10525,7 @@ f_feedkeys(argvars, rettv) case 'n': remap = FALSE; break; case 'm': remap = TRUE; break; case 't': typed = TRUE; break; + case 'i': insert = TRUE; break; } } } @@ -10534,7 +10536,7 @@ f_feedkeys(argvars, rettv) if (keys_esc != NULL) { ins_typebuf(keys_esc, (remap ? REMAP_YES : REMAP_NONE), - typebuf.tb_len, !typed, FALSE); + insert ? 0 : typebuf.tb_len, !typed, FALSE); vim_free(keys_esc); if (vgetc_busy) typebuf_was_filled = TRUE;