0
0
mirror of https://github.com/vim/vim.git synced 2025-09-27 04:14:06 -04:00

patch 8.2.1347: cannot easily get the script ID

Problem:    Cannot easily get the script ID.
Solution:   Support expand('<SID>').
This commit is contained in:
Bram Moolenaar
2020-08-01 20:45:11 +02:00
parent 491799be50
commit 909443028b
4 changed files with 38 additions and 7 deletions

View File

@@ -1167,6 +1167,10 @@ When executing an autocommand or a user command, it will run in the context of
the script it was defined in. This makes it possible that the command calls a the script it was defined in. This makes it possible that the command calls a
local function or uses a local mapping. local function or uses a local mapping.
In case the value is used in a context where <SID> cannot be correctly
expanded, use the expand() function: >
let &includexpr = expand('<SID>') .. 'My_includeexpr()'
Otherwise, using "<SID>" outside of a script context is an error. Otherwise, using "<SID>" outside of a script context is an error.
If you need to get the script number to use in a complicated script, you can If you need to get the script number to use in a complicated script, you can

View File

@@ -8302,9 +8302,11 @@ find_cmdline_var(char_u *src, int *usedlen)
#define SPEC_AMATCH (SPEC_ABUF + 1) #define SPEC_AMATCH (SPEC_ABUF + 1)
"<sflnum>", // script file line number "<sflnum>", // script file line number
#define SPEC_SFLNUM (SPEC_AMATCH + 1) #define SPEC_SFLNUM (SPEC_AMATCH + 1)
"<SID>", // script ID: <SNR>123_
#define SPEC_SID (SPEC_SFLNUM + 1)
#ifdef FEAT_CLIENTSERVER #ifdef FEAT_CLIENTSERVER
"<client>" "<client>"
# define SPEC_CLIENT (SPEC_SFLNUM + 1) # define SPEC_CLIENT (SPEC_SID + 1)
#endif #endif
}; };
@@ -8581,6 +8583,16 @@ eval_vars(
break; break;
#endif #endif
case SPEC_SID:
if (current_sctx.sc_sid <= 0)
{
*errormsg = _(e_usingsid);
return NULL;
}
sprintf((char *)strbuf, "<SNR>%d_", current_sctx.sc_sid);
result = strbuf;
break;
#ifdef FEAT_CLIENTSERVER #ifdef FEAT_CLIENTSERVER
case SPEC_CLIENT: // Source of last submitted input case SPEC_CLIENT: // Source of last submitted input
sprintf((char *)strbuf, PRINTF_HEX_LONG_U, sprintf((char *)strbuf, PRINTF_HEX_LONG_U,

View File

@@ -1,5 +1,7 @@
" Tests for expand() " Tests for expand()
source shared.vim
let s:sfile = expand('<sfile>') let s:sfile = expand('<sfile>')
let s:slnum = str2nr(expand('<slnum>')) let s:slnum = str2nr(expand('<slnum>'))
let s:sflnum = str2nr(expand('<sflnum>')) let s:sflnum = str2nr(expand('<sflnum>'))
@@ -18,20 +20,20 @@ endfunc
" This test depends on the location in the test file, put it first. " This test depends on the location in the test file, put it first.
func Test_expand_sflnum() func Test_expand_sflnum()
call assert_equal(5, s:sflnum) call assert_equal(7, s:sflnum)
call assert_equal(22, str2nr(expand('<sflnum>'))) call assert_equal(24, str2nr(expand('<sflnum>')))
" Line-continuation " Line-continuation
call assert_equal( call assert_equal(
\ 25, \ 27,
\ str2nr(expand('<sflnum>'))) \ str2nr(expand('<sflnum>')))
" Call in script-local function " Call in script-local function
call assert_equal(16, s:expand_sflnum()) call assert_equal(18, s:expand_sflnum())
" Call in command " Call in command
command Flnum echo expand('<sflnum>') command Flnum echo expand('<sflnum>')
call assert_equal(34, str2nr(trim(execute('Flnum')))) call assert_equal(36, str2nr(trim(execute('Flnum'))))
delcommand Flnum delcommand Flnum
endfunc endfunc
@@ -60,7 +62,7 @@ func Test_expand_sfile_and_stack()
endfunc endfunc
func Test_expand_slnum() func Test_expand_slnum()
call assert_equal(4, s:slnum) call assert_equal(6, s:slnum)
call assert_equal(2, str2nr(expand('<slnum>'))) call assert_equal(2, str2nr(expand('<slnum>')))
" Line-continuation " Line-continuation
@@ -86,6 +88,17 @@ func Test_expand()
quit quit
endfunc endfunc
func s:sid_test()
return 'works'
endfunc
func Test_expand_SID()
let sid = expand('<SID>')
execute 'let g:sid_result = ' .. sid .. 'sid_test()'
call assert_equal('works', g:sid_result)
endfunc
" Test for 'wildignore' with expand() " Test for 'wildignore' with expand()
func Test_expand_wildignore() func Test_expand_wildignore()
set wildignore=*.vim set wildignore=*.vim

View File

@@ -754,6 +754,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 */
/**/
1347,
/**/ /**/
1346, 1346,
/**/ /**/