diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-11-30 22:48:32 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-11-30 22:48:32 +0100 |
commit | 07dc18ffa4e7ed202f219fe2fd3d6f58246f71f9 (patch) | |
tree | cff51538c1e68b208e06b278f4b675dbe00380a0 /src | |
parent | 01a060da74b756b161e595b39a7877cb7612120a (diff) | |
download | vim-git-07dc18ffa4e7ed202f219fe2fd3d6f58246f71f9.tar.gz |
patch 8.1.0553: it is not easy to edit a script that was sourcedv8.1.0553
Problem: It is not easy to edit a script that was sourced.
Solution: Add a count to ":scriptnames", so that ":script 40" edits the
script with script ID 40.
Diffstat (limited to 'src')
-rw-r--r-- | src/Make_all.mak | 1 | ||||
-rw-r--r-- | src/ex_cmds.h | 22 | ||||
-rw-r--r-- | src/ex_cmds2.c | 15 | ||||
-rw-r--r-- | src/testdir/Make_all.mak | 1 | ||||
-rw-r--r-- | src/testdir/test_scriptnames.vim | 26 | ||||
-rw-r--r-- | src/version.c | 2 |
6 files changed, 55 insertions, 12 deletions
diff --git a/src/Make_all.mak b/src/Make_all.mak index da3a62ca8..466f17e9e 100644 --- a/src/Make_all.mak +++ b/src/Make_all.mak @@ -153,6 +153,7 @@ NEW_TESTS = \ test_reltime \ test_retab \ test_ruby \ + test_scriptnames \ test_scroll_opt \ test_scrollbind \ test_search \ diff --git a/src/ex_cmds.h b/src/ex_cmds.h index c5e0bf449..335871a01 100644 --- a/src/ex_cmds.h +++ b/src/ex_cmds.h @@ -62,15 +62,15 @@ #define FILE1 (FILES | NOSPC) /* 1 file allowed, defaults to current file */ /* values for cmd_addr_type */ -#define ADDR_LINES 0 -#define ADDR_WINDOWS 1 -#define ADDR_ARGUMENTS 2 -#define ADDR_LOADED_BUFFERS 3 -#define ADDR_BUFFERS 4 -#define ADDR_TABS 5 -#define ADDR_TABS_RELATIVE 6 /* Tab page that only relative */ -#define ADDR_QUICKFIX 7 -#define ADDR_OTHER 99 +#define ADDR_LINES 0 // buffer line numbers +#define ADDR_WINDOWS 1 // window number +#define ADDR_ARGUMENTS 2 // argument number +#define ADDR_LOADED_BUFFERS 3 // buffer number of loaded buffer +#define ADDR_BUFFERS 4 // buffer number +#define ADDR_TABS 5 // tab page number +#define ADDR_TABS_RELATIVE 6 // Tab page that only relative +#define ADDR_QUICKFIX 7 // quickfix list entry number +#define ADDR_OTHER 99 // something else #ifndef DO_DECLARE_EXCMD typedef struct exarg exarg_T; @@ -1260,8 +1260,8 @@ EX(CMD_sbrewind, "sbrewind", ex_brewind, EDITCMD|TRLBAR, ADDR_LINES), EX(CMD_scriptnames, "scriptnames", ex_scriptnames, - TRLBAR|CMDWIN, - ADDR_LINES), + BANG|RANGE|NOTADR|COUNT|TRLBAR|CMDWIN, + ADDR_OTHER), EX(CMD_scriptencoding, "scriptencoding", ex_scriptencoding, WORD1|TRLBAR|CMDWIN, ADDR_LINES), diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c index d6b6f5bf8..c3f26b64c 100644 --- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -4690,10 +4690,23 @@ theend: * ":scriptnames" */ void -ex_scriptnames(exarg_T *eap UNUSED) +ex_scriptnames(exarg_T *eap) { int i; + if (eap->addr_count > 0) + { + // :script {scriptId}: edit the script + if (eap->line2 < 1 || eap->line2 > script_items.ga_len) + EMSG(_(e_invarg)); + else + { + eap->arg = SCRIPT_ITEM(eap->line2).sn_name; + do_exedit(eap, NULL); + } + return; + } + for (i = 1; i <= script_items.ga_len && !got_int; ++i) if (SCRIPT_ITEM(i).sn_name != NULL) { diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak index 45f45d7fd..5b8515673 100644 --- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -158,6 +158,7 @@ NEW_TESTS = test_arabic.res \ test_registers.res \ test_retab.res \ test_ruby.res \ + test_scriptnames.res \ test_scrollbind.res \ test_search.res \ test_shortpathname.res \ diff --git a/src/testdir/test_scriptnames.vim b/src/testdir/test_scriptnames.vim new file mode 100644 index 000000000..fc6c910bf --- /dev/null +++ b/src/testdir/test_scriptnames.vim @@ -0,0 +1,26 @@ +" Test for :scriptnames + +func Test_scriptnames() + call writefile(['let did_load_script = 123'], 'Xscripting') + source Xscripting + call assert_equal(123, g:did_load_script) + + let scripts = split(execute('scriptnames'), "\n") + let last = scripts[-1] + call assert_match('\<Xscripting\>', last) + let lastnr = substitute(last, '\D*\(\d\+\):.*', '\1', '') + exe 'script ' . lastnr + call assert_equal('Xscripting', expand('%:t')) + + call assert_fails('script ' . (lastnr + 1), 'E474:') + call assert_fails('script 0', 'E939:') + + new + call setline(1, 'nothing') + call assert_fails('script ' . lastnr, 'E37:') + exe 'script! ' . lastnr + call assert_equal('Xscripting', expand('%:t')) + + bwipe + call delete('Xscripting') +endfunc diff --git a/src/version.c b/src/version.c index 1fc35edd7..5f61775ac 100644 --- a/src/version.c +++ b/src/version.c @@ -793,6 +793,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 553, +/**/ 552, /**/ 551, |