mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 7.4.1150
Problem: 'langmap' applies to the first character typed in Select mode. (David Watson) Solution: Check for SELECTMODE. (Christian Brabandt, closes #572) Add the 'x' flag to feedkeys().
This commit is contained in:
parent
d6357e8f93
commit
25281634cd
@ -3099,6 +3099,11 @@ feedkeys({string} [, {mode}]) *feedkeys()*
|
|||||||
if coming from a mapping. This matters for undo,
|
if coming from a mapping. This matters for undo,
|
||||||
opening folds, etc.
|
opening folds, etc.
|
||||||
'i' Insert the string instead of appending (see above).
|
'i' Insert the string instead of appending (see above).
|
||||||
|
'x' Execute commands until typeahead is empty. This is
|
||||||
|
similar to using ":normal!". You can call feedkeys()
|
||||||
|
several times without 'x' and then one time with 'x'
|
||||||
|
(possibly with an empty {string}) to execute all the
|
||||||
|
typeahead.
|
||||||
Return value is always 0.
|
Return value is always 0.
|
||||||
|
|
||||||
filereadable({file}) *filereadable()*
|
filereadable({file}) *filereadable()*
|
||||||
|
@ -10226,17 +10226,26 @@ exec_normal_cmd(cmd, remap, silent)
|
|||||||
int remap;
|
int remap;
|
||||||
int silent;
|
int silent;
|
||||||
{
|
{
|
||||||
oparg_T oa;
|
/* Stuff the argument into the typeahead buffer. */
|
||||||
|
ins_typebuf(cmd, remap, 0, TRUE, silent);
|
||||||
|
exec_normal(FALSE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(FEAT_EX_EXTRA) || defined(FEAT_MENU) || defined(FEAT_EVAL) \
|
||||||
|
|| defined(PROTO)
|
||||||
/*
|
/*
|
||||||
* Stuff the argument into the typeahead buffer.
|
|
||||||
* Execute normal_cmd() until there is no typeahead left.
|
* Execute normal_cmd() until there is no typeahead left.
|
||||||
*/
|
*/
|
||||||
|
void
|
||||||
|
exec_normal(int was_typed)
|
||||||
|
{
|
||||||
|
oparg_T oa;
|
||||||
|
|
||||||
clear_oparg(&oa);
|
clear_oparg(&oa);
|
||||||
finish_op = FALSE;
|
finish_op = FALSE;
|
||||||
ins_typebuf(cmd, remap, 0, TRUE, silent);
|
while ((!stuff_empty() || ((was_typed || !typebuf_typed())
|
||||||
while ((!stuff_empty() || (!typebuf_typed() && typebuf.tb_len > 0))
|
&& typebuf.tb_len > 0)) && !got_int)
|
||||||
&& !got_int)
|
|
||||||
{
|
{
|
||||||
update_topline_cursor();
|
update_topline_cursor();
|
||||||
normal_cmd(&oa, TRUE); /* execute a Normal mode cmd */
|
normal_cmd(&oa, TRUE); /* execute a Normal mode cmd */
|
||||||
|
@ -2149,7 +2149,8 @@ vgetorpeek(advance)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
LANGMAP_ADJUST(c1,
|
LANGMAP_ADJUST(c1,
|
||||||
(State & (CMDLINE | INSERT)) == 0);
|
(State & (CMDLINE | INSERT)) == 0
|
||||||
|
&& get_real_state() != SELECTMODE);
|
||||||
nolmaplen = 0;
|
nolmaplen = 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -638,7 +638,7 @@ normal_cmd(oap, toplevel)
|
|||||||
* Get the command character from the user.
|
* Get the command character from the user.
|
||||||
*/
|
*/
|
||||||
c = safe_vgetc();
|
c = safe_vgetc();
|
||||||
LANGMAP_ADJUST(c, TRUE);
|
LANGMAP_ADJUST(c, get_real_state() != SELECTMODE);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If a mapping was started in Visual or Select mode, remember the length
|
* If a mapping was started in Visual or Select mode, remember the length
|
||||||
|
@ -50,6 +50,7 @@ int vim_mkdir_emsg(char_u *name, int prot);
|
|||||||
FILE *open_exfile(char_u *fname, int forceit, char *mode);
|
FILE *open_exfile(char_u *fname, int forceit, char *mode);
|
||||||
void update_topline_cursor(void);
|
void update_topline_cursor(void);
|
||||||
void exec_normal_cmd(char_u *cmd, int remap, int silent);
|
void exec_normal_cmd(char_u *cmd, int remap, int silent);
|
||||||
|
void exec_normal(int was_typed);
|
||||||
int find_cmdline_var(char_u *src, int *usedlen);
|
int find_cmdline_var(char_u *src, int *usedlen);
|
||||||
char_u *eval_vars(char_u *src, char_u *srcstart, int *usedlen, linenr_T *lnump, char_u **errormsg, int *escaped);
|
char_u *eval_vars(char_u *src, char_u *srcstart, int *usedlen, linenr_T *lnump, char_u **errormsg, int *escaped);
|
||||||
char_u *expand_sfile(char_u *arg);
|
char_u *expand_sfile(char_u *arg);
|
||||||
|
@ -173,6 +173,7 @@ NEW_TESTS = test_arglist.res \
|
|||||||
test_cdo.res \
|
test_cdo.res \
|
||||||
test_hardcopy.res \
|
test_hardcopy.res \
|
||||||
test_increment.res \
|
test_increment.res \
|
||||||
|
test_langmap.res \
|
||||||
test_perl.res \
|
test_perl.res \
|
||||||
test_quickfix.res \
|
test_quickfix.res \
|
||||||
test_syntax.res \
|
test_syntax.res \
|
||||||
|
24
src/testdir/test_langmap.vim
Normal file
24
src/testdir/test_langmap.vim
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
" tests for 'langmap'
|
||||||
|
|
||||||
|
func Test_langmap()
|
||||||
|
new
|
||||||
|
set langmap=}l,^x,%v
|
||||||
|
|
||||||
|
call setline(1, ['abc'])
|
||||||
|
call feedkeys('gg0}^', 'tx')
|
||||||
|
call assert_equal('ac', getline(1))
|
||||||
|
|
||||||
|
" in Replace mode
|
||||||
|
" need silent! to avoid a delay when entering Insert mode
|
||||||
|
call setline(1, ['abcde'])
|
||||||
|
silent! call feedkeys("gg0lR%{z\<Esc>00", 'tx')
|
||||||
|
call assert_equal('a%{ze', getline(1))
|
||||||
|
|
||||||
|
" in Select mode
|
||||||
|
" need silent! to avoid a delay when entering Insert mode
|
||||||
|
call setline(1, ['abcde'])
|
||||||
|
silent! call feedkeys("gg0}%}\<C-G>}^\<Esc>00", 'tx')
|
||||||
|
call assert_equal('a}^de', getline(1))
|
||||||
|
|
||||||
|
quit!
|
||||||
|
endfunc
|
@ -741,6 +741,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1150,
|
||||||
/**/
|
/**/
|
||||||
1149,
|
1149,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user