1
0
forked from aniani/vim

patch 8.1.1251: no test for completion of mapping keys

Problem:    No test for completion of mapping keys.
Solution:   Add a test.  Also clean up the code.
This commit is contained in:
Bram Moolenaar
2019-05-03 15:13:57 +02:00
parent d788543ac6
commit 2cb9f02532
5 changed files with 50 additions and 14 deletions

View File

@@ -4263,7 +4263,7 @@ set_context_in_map_cmd(
} }
/* /*
* Find all mapping/abbreviation names that match regexp 'prog'. * Find all mapping/abbreviation names that match regexp "regmatch"'.
* For command line expansion of ":[un]map" and ":[un]abbrev" in all modes. * For command line expansion of ":[un]map" and ":[un]abbrev" in all modes.
* Return OK if matches found, FAIL otherwise. * Return OK if matches found, FAIL otherwise.
*/ */
@@ -4343,7 +4343,7 @@ ExpandMappings(
{ {
if (mp->m_mode & expand_mapmodes) if (mp->m_mode & expand_mapmodes)
{ {
p = translate_mapping(mp->m_keys, TRUE); p = translate_mapping(mp->m_keys);
if (p != NULL && vim_regexec(regmatch, p, (colnr_T)0)) if (p != NULL && vim_regexec(regmatch, p, (colnr_T)0))
{ {
if (round == 1) if (round == 1)

View File

@@ -74,7 +74,7 @@ char_u *replace_termcodes(char_u *from, char_u **bufp, int from_part, int do_lt,
int find_term_bykeys(char_u *src); int find_term_bykeys(char_u *src);
void show_termcodes(void); void show_termcodes(void);
int show_one_termcode(char_u *name, char_u *code, int printit); int show_one_termcode(char_u *name, char_u *code, int printit);
char_u *translate_mapping(char_u *str, int expmap); char_u *translate_mapping(char_u *str);
void update_tcap(int attr); void update_tcap(int attr);
void swap_tcap(void); void swap_tcap(void);
guicolor_T gui_get_color_cmn(char_u *name); guicolor_T gui_get_color_cmn(char_u *name);

View File

@@ -6629,22 +6629,20 @@ check_for_codes_from_term(void)
#if defined(FEAT_CMDL_COMPL) || defined(PROTO) #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
/* /*
* Translate an internal mapping/abbreviation representation into the * Translate an internal mapping/abbreviation representation into the
* corresponding external one recognized by :map/:abbrev commands; * corresponding external one recognized by :map/:abbrev commands.
* respects the current B/k/< settings of 'cpoption'. * Respects the current B/k/< settings of 'cpoption'.
* *
* This function is called when expanding mappings/abbreviations on the * This function is called when expanding mappings/abbreviations on the
* command-line, and for building the "Ambiguous mapping..." error message. * command-line.
* *
* It uses a growarray to build the translation string since the * It uses a growarray to build the translation string since the latter can be
* latter can be wider than the original description. The caller has to * wider than the original description. The caller has to free the string
* free the string afterwards. * afterwards.
* *
* Returns NULL when there is a problem. * Returns NULL when there is a problem.
*/ */
char_u * char_u *
translate_mapping( translate_mapping(char_u *str)
char_u *str,
int expmap) /* TRUE when expanding mappings on command-line */
{ {
garray_T ga; garray_T ga;
int c; int c;
@@ -6691,7 +6689,7 @@ translate_mapping(
} }
if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL) if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL)
{ {
if (expmap && cpo_special) if (cpo_special)
{ {
ga_clear(&ga); ga_clear(&ga);
return NULL; return NULL;
@@ -6703,7 +6701,7 @@ translate_mapping(
} }
if (IS_SPECIAL(c) || modifiers) /* special key */ if (IS_SPECIAL(c) || modifiers) /* special key */
{ {
if (expmap && cpo_special) if (cpo_special)
{ {
ga_clear(&ga); ga_clear(&ga);
return NULL; return NULL;

View File

@@ -77,6 +77,42 @@ func Test_map_completion()
call assert_equal('"map <special> <nowait>', getreg(':')) call assert_equal('"map <special> <nowait>', getreg(':'))
call feedkeys(":map <silent> <sp\<Tab>\<Home>\"\<CR>", 'xt') call feedkeys(":map <silent> <sp\<Tab>\<Home>\"\<CR>", 'xt')
call assert_equal('"map <silent> <special>', getreg(':')) call assert_equal('"map <silent> <special>', getreg(':'))
map ,f commaf
map ,g commaf
call feedkeys(":map ,\<Tab>\<Home>\"\<CR>", 'xt')
call assert_equal('"map ,f', getreg(':'))
call feedkeys(":map ,\<Tab>\<Tab>\<Home>\"\<CR>", 'xt')
call assert_equal('"map ,g', getreg(':'))
unmap ,f
unmap ,g
set cpo-=< cpo-=B cpo-=k
map <Left> left
call feedkeys(":map <L\<Tab>\<Home>\"\<CR>", 'xt')
call assert_equal('"map <Left>', getreg(':'))
unmap <Left>
set cpo+=<
map <Left> left
call feedkeys(":map <L\<Tab>\<Home>\"\<CR>", 'xt')
call assert_equal('"map <Left>', getreg(':'))
unmap <Left>
set cpo-=<
set cpo+=B
map <Left> left
call feedkeys(":map <L\<Tab>\<Home>\"\<CR>", 'xt')
call assert_equal('"map <Left>', getreg(':'))
unmap <Left>
set cpo-=B
set cpo+=k
map <Left> left
call feedkeys(":map <L\<Tab>\<Home>\"\<CR>", 'xt')
call assert_equal('"map <Left>', getreg(':'))
unmap <Left>
set cpo-=k
endfunc endfunc
func Test_match_completion() func Test_match_completion()

View File

@@ -767,6 +767,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 */
/**/
1251,
/**/ /**/
1250, 1250,
/**/ /**/