vim-patch:8.1.1251: test completion of mapping keys #10691

Problem:    No test for completion of mapping keys.
Solution:   Add a test.  Also clean up the code.
2cb9f02532
This commit is contained in:
Jan Edmund Lazo
2019-08-04 19:12:35 -04:00
committed by Justin M. Keyes
parent 4c35e6fe67
commit a724209b5a
2 changed files with 45 additions and 20 deletions

View File

@@ -3558,11 +3558,9 @@ set_context_in_map_cmd (
return NULL; return NULL;
} }
/* // Find all mapping/abbreviation names that match regexp "regmatch".
* Find all mapping/abbreviation names that match regexp 'prog'. // 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.
*/
int ExpandMappings(regmatch_T *regmatch, int *num_file, char_u ***file) int ExpandMappings(regmatch_T *regmatch, int *num_file, char_u ***file)
{ {
mapblock_T *mp; mapblock_T *mp;
@@ -3622,7 +3620,7 @@ int ExpandMappings(regmatch_T *regmatch, int *num_file, char_u ***file)
mp = maphash[hash]; mp = maphash[hash];
for (; mp; mp = mp->m_next) { for (; mp; mp = mp->m_next) {
if (mp->m_mode & expand_mapmodes) { if (mp->m_mode & expand_mapmodes) {
p = translate_mapping(mp->m_keys, true, CPO_TO_CPO_FLAGS); p = translate_mapping(mp->m_keys, CPO_TO_CPO_FLAGS);
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)
++count; ++count;
@@ -4346,16 +4344,15 @@ void add_map(char_u *map, int mode)
// corresponding external one recognized by :map/:abbrev commands. // corresponding external one recognized by :map/:abbrev commands.
// //
// 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.
static char_u * translate_mapping ( static char_u * translate_mapping (
char_u *str, char_u *str,
int expmap, // True when expanding mappings on command-line
int cpo_flags // Value of various flags present in &cpo int cpo_flags // Value of various flags present in &cpo
) )
{ {
@@ -4375,10 +4372,6 @@ static char_u * translate_mapping (
} }
if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL) { if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL) {
if (expmap) {
ga_clear(&ga);
return NULL;
}
c = TO_SPECIAL(str[1], str[2]); c = TO_SPECIAL(str[1], str[2]);
if (c == K_ZERO) { if (c == K_ZERO) {
// display <Nul> as ^@ // display <Nul> as ^@
@@ -4387,10 +4380,6 @@ static char_u * translate_mapping (
str += 2; str += 2;
} }
if (IS_SPECIAL(c) || modifiers) { // special key if (IS_SPECIAL(c) || modifiers) { // special key
if (expmap) {
ga_clear(&ga);
return NULL;
}
ga_concat(&ga, get_special_key_name(c, modifiers)); ga_concat(&ga, get_special_key_name(c, modifiers));
continue; /* for (str) */ continue; /* for (str) */
} }

View File

@@ -44,6 +44,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()