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().
Files: src/getchar.c, src/normal.c, src/testdir/test_langmap.vim,
src/ex_docmd.c, src/proto/ex_docmd.pro, src/testdir/Make_all.mak,
runtime/doc/eval.txt
*** ../vim-7.4.1149/src/getchar.c 2015-12-31 19:06:56.052081865 +0100
--- src/getchar.c 2016-01-21 22:27:13.054855993 +0100
***************
*** 2149,2155 ****
else
{
LANGMAP_ADJUST(c1,
! (State & (CMDLINE | INSERT)) == 0);
nolmaplen = 0;
}
#endif
--- 2149,2156 ----
else
{
LANGMAP_ADJUST(c1,
! (State & (CMDLINE | INSERT)) == 0
! && get_real_state() != SELECTMODE);
nolmaplen = 0;
}
#endif
*** ../vim-7.4.1149/src/normal.c 2016-01-12 22:20:53.034213670 +0100
--- src/normal.c 2016-01-21 22:57:10.083976286 +0100
***************
*** 638,644 ****
* Get the command character from the user.
*/
c = safe_vgetc();
! LANGMAP_ADJUST(c, TRUE);
/*
* If a mapping was started in Visual or Select mode, remember the length
--- 638,644 ----
* Get the command character from the user.
*/
c = safe_vgetc();
! LANGMAP_ADJUST(c, get_real_state() != SELECTMODE);
/*
* If a mapping was started in Visual or Select mode, remember the length
*** ../vim-7.4.1149/src/testdir/test_langmap.vim 2016-01-21
23:30:38.231042140 +0100
--- src/testdir/test_langmap.vim 2016-01-21 23:21:18.508896103 +0100
***************
*** 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
*** ../vim-7.4.1149/src/ex_docmd.c 2016-01-10 13:54:42.871030788 +0100
--- src/ex_docmd.c 2016-01-21 22:34:03.378531788 +0100
***************
*** 10226,10242 ****
int remap;
int silent;
{
oparg_T oa;
- /*
- * Stuff the argument into the typeahead buffer.
- * Execute normal_cmd() until there is no typeahead left.
- */
clear_oparg(&oa);
finish_op = FALSE;
! ins_typebuf(cmd, remap, 0, TRUE, silent);
! while ((!stuff_empty() || (!typebuf_typed() && typebuf.tb_len > 0))
! && !got_int)
{
update_topline_cursor();
normal_cmd(&oa, TRUE); /* execute a Normal mode cmd */
--- 10226,10251 ----
int remap;
int silent;
{
+ /* 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)
+ /*
+ * Execute normal_cmd() until there is no typeahead left.
+ */
+ void
+ exec_normal(int was_typed)
+ {
oparg_T oa;
clear_oparg(&oa);
finish_op = FALSE;
! while ((!stuff_empty() || ((was_typed || !typebuf_typed())
! && typebuf.tb_len > 0)) && !got_int)
{
update_topline_cursor();
normal_cmd(&oa, TRUE); /* execute a Normal mode cmd */
*** ../vim-7.4.1149/src/proto/ex_docmd.pro 2016-01-19 13:21:55.837334377
+0100
--- src/proto/ex_docmd.pro 2016-01-21 22:34:07.874484415 +0100
***************
*** 50,55 ****
--- 50,56 ----
FILE *open_exfile(char_u *fname, int forceit, char *mode);
void update_topline_cursor(void);
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);
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);
*** ../vim-7.4.1149/src/testdir/Make_all.mak 2016-01-19 22:28:54.615592984
+0100
--- src/testdir/Make_all.mak 2016-01-21 22:14:20.747000441 +0100
***************
*** 173,178 ****
--- 173,179 ----
test_cdo.res \
test_hardcopy.res \
test_increment.res \
+ test_langmap.res \
test_perl.res \
test_quickfix.res \
test_syntax.res \
*** ../vim-7.4.1149/runtime/doc/eval.txt 2016-01-17 21:48:55.837086369
+0100
--- runtime/doc/eval.txt 2016-01-21 23:29:26.439795247 +0100
***************
*** 3081,3086 ****
--- 3102,3112 ----
if coming from a mapping. This matters for undo,
opening folds, etc.
'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.
filereadable({file}) *filereadable()*
*** ../vim-7.4.1149/src/version.c 2016-01-21 21:48:02.263696689 +0100
--- src/version.c 2016-01-21 23:30:07.215367500 +0100
***************
*** 743,744 ****
--- 743,746 ----
{ /* Add new patch number below this line */
+ /**/
+ 1150,
/**/
--
If they don't keep on exercising their lips, he thought, their brains
start working.
-- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.