forked from aniani/vim
patch 8.2.4751: mapping <SID>name.Func does not work for autoload script
Problem: Mapping <SID>name.Func does not work for script in autoload
directory.
Solution: Use the # form for a script in the autoload directory.
(closes #10186)
This commit is contained in:
33
src/term.c
33
src/term.c
@@ -5963,24 +5963,26 @@ replace_termcodes(
|
|||||||
int do_special; // recognize <> key codes
|
int do_special; // recognize <> key codes
|
||||||
int do_key_code; // recognize raw key codes
|
int do_key_code; // recognize raw key codes
|
||||||
char_u *result; // buffer for resulting string
|
char_u *result; // buffer for resulting string
|
||||||
|
garray_T ga;
|
||||||
|
|
||||||
do_backslash = (vim_strchr(p_cpo, CPO_BSLASH) == NULL);
|
do_backslash = (vim_strchr(p_cpo, CPO_BSLASH) == NULL);
|
||||||
do_special = (vim_strchr(p_cpo, CPO_SPECI) == NULL)
|
do_special = (vim_strchr(p_cpo, CPO_SPECI) == NULL)
|
||||||
|| (flags & REPTERM_SPECIAL);
|
|| (flags & REPTERM_SPECIAL);
|
||||||
do_key_code = (vim_strchr(p_cpo, CPO_KEYCODE) == NULL);
|
do_key_code = (vim_strchr(p_cpo, CPO_KEYCODE) == NULL);
|
||||||
|
src = from;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Allocate space for the translation. Worst case a single character is
|
* Allocate space for the translation. Worst case a single character is
|
||||||
* replaced by 6 bytes (shifted special key), plus a NUL at the end.
|
* replaced by 6 bytes (shifted special key), plus a NUL at the end.
|
||||||
|
* In the rare case more might be needed ga_grow() must be called again.
|
||||||
*/
|
*/
|
||||||
result = alloc(STRLEN(from) * 6 + 1);
|
ga_init2(&ga, 1L, 100);
|
||||||
if (result == NULL) // out of memory
|
if (ga_grow(&ga, STRLEN(src) * 6 + 1) == FAIL) // out of memory
|
||||||
{
|
{
|
||||||
*bufp = NULL;
|
*bufp = NULL;
|
||||||
return from;
|
return from;
|
||||||
}
|
}
|
||||||
|
result = ga.ga_data;
|
||||||
src = from;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check for #n at start only: function key n
|
* Check for #n at start only: function key n
|
||||||
@@ -6033,8 +6035,28 @@ replace_termcodes(
|
|||||||
|
|
||||||
if (imp != NULL)
|
if (imp != NULL)
|
||||||
{
|
{
|
||||||
sid = imp->imp_sid;
|
scriptitem_T *si = SCRIPT_ITEM(imp->imp_sid);
|
||||||
|
size_t len;
|
||||||
|
|
||||||
src = dot + 1;
|
src = dot + 1;
|
||||||
|
if (si->sn_autoload_prefix != NULL)
|
||||||
|
{
|
||||||
|
// Turn "<SID>name.Func"
|
||||||
|
// into "scriptname#Func".
|
||||||
|
len = STRLEN(si->sn_autoload_prefix);
|
||||||
|
if (ga_grow(&ga, STRLEN(src) * 6 + len + 1)
|
||||||
|
== FAIL)
|
||||||
|
{
|
||||||
|
ga_clear(&ga);
|
||||||
|
*bufp = NULL;
|
||||||
|
return from;
|
||||||
|
}
|
||||||
|
result = ga.ga_data;
|
||||||
|
STRCPY(result + dlen, si->sn_autoload_prefix);
|
||||||
|
dlen += len;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
sid = imp->imp_sid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6048,7 +6070,6 @@ replace_termcodes(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
slen = trans_special(&src, result + dlen, FSK_KEYCODE
|
slen = trans_special(&src, result + dlen, FSK_KEYCODE
|
||||||
| ((flags & REPTERM_NO_SIMPLIFY) ? 0 : FSK_SIMPLIFY),
|
| ((flags & REPTERM_NO_SIMPLIFY) ? 0 : FSK_SIMPLIFY),
|
||||||
did_simplify);
|
did_simplify);
|
||||||
|
|||||||
@@ -669,32 +669,63 @@ def Test_use_import_in_mapping()
|
|||||||
nunmap <F4>
|
nunmap <F4>
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_use_autoload_import_in_mapping()
|
def Test_use_relative_autoload_import_in_mapping()
|
||||||
var lines =<< trim END
|
var lines =<< trim END
|
||||||
vim9script
|
vim9script
|
||||||
export def Func()
|
export def Func()
|
||||||
g:result = 42
|
g:result = 42
|
||||||
enddef
|
enddef
|
||||||
END
|
END
|
||||||
writefile(lines, 'XautoloadExport.vim')
|
writefile(lines, 'XrelautoloadExport.vim')
|
||||||
lines =<< trim END
|
lines =<< trim END
|
||||||
vim9script
|
vim9script
|
||||||
import autoload './XautoloadExport.vim' as some
|
import autoload './XrelautoloadExport.vim' as some
|
||||||
nnoremap <F3> :call <SID>some.Func()<CR>
|
nnoremap <F3> :call <SID>some.Func()<CR>
|
||||||
END
|
END
|
||||||
writefile(lines, 'Xmapscript.vim')
|
writefile(lines, 'Xmapscript.vim')
|
||||||
|
|
||||||
source Xmapscript.vim
|
source Xmapscript.vim
|
||||||
assert_match('\d\+ A: .*XautoloadExport.vim', execute('scriptnames')->split("\n")[-1])
|
assert_match('\d\+ A: .*XrelautoloadExport.vim', execute('scriptnames')->split("\n")[-1])
|
||||||
feedkeys("\<F3>", "xt")
|
feedkeys("\<F3>", "xt")
|
||||||
assert_equal(42, g:result)
|
assert_equal(42, g:result)
|
||||||
|
|
||||||
unlet g:result
|
unlet g:result
|
||||||
delete('XautoloadExport.vim')
|
delete('XrelautoloadExport.vim')
|
||||||
delete('Xmapscript.vim')
|
delete('Xmapscript.vim')
|
||||||
nunmap <F3>
|
nunmap <F3>
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
|
def Test_use_autoload_import_in_mapping()
|
||||||
|
var lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
export def Func()
|
||||||
|
g:result = 49
|
||||||
|
enddef
|
||||||
|
END
|
||||||
|
mkdir('Xdir/autoload', 'p')
|
||||||
|
writefile(lines, 'Xdir/autoload/XautoloadExport.vim')
|
||||||
|
var save_rtp = &rtp
|
||||||
|
exe 'set rtp^=' .. getcwd() .. '/Xdir'
|
||||||
|
|
||||||
|
lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
import autoload 'XautoloadExport.vim' as some
|
||||||
|
nnoremap <F3> :call <SID>some.Func()<CR>
|
||||||
|
END
|
||||||
|
writefile(lines, 'Xmapscript.vim')
|
||||||
|
|
||||||
|
source Xmapscript.vim
|
||||||
|
assert_match('\d\+ A: .*autoload/XautoloadExport.vim', execute('scriptnames')->split("\n")[-1])
|
||||||
|
feedkeys("\<F3>", "xt")
|
||||||
|
assert_equal(49, g:result)
|
||||||
|
|
||||||
|
unlet g:result
|
||||||
|
delete('Xmapscript.vim')
|
||||||
|
nunmap <F3>
|
||||||
|
delete('Xdir', 'rf')
|
||||||
|
&rtp = save_rtp
|
||||||
|
enddef
|
||||||
|
|
||||||
def Test_use_import_in_command_completion()
|
def Test_use_import_in_command_completion()
|
||||||
var lines =<< trim END
|
var lines =<< trim END
|
||||||
vim9script
|
vim9script
|
||||||
|
|||||||
@@ -746,6 +746,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 */
|
||||||
|
/**/
|
||||||
|
4751,
|
||||||
/**/
|
/**/
|
||||||
4750,
|
4750,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user