To: vim_dev@googlegroups.com Subject: Patch 7.4.1553 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.1553 Problem: ":runtime" does not use 'packpath'. Solution: Add "what" argument. Files: src/ex_cmds2.c, src/vim.h, runtime/doc/repeat.txt, src/testdir/test_packadd.vim *** ../vim-7.4.1552/src/ex_cmds2.c 2016-03-12 22:11:34.239300280 +0100 --- src/ex_cmds2.c 2016-03-12 22:42:18.755994876 +0100 *************** *** 2901,2912 **** #endif /* ! * ":runtime {name}" */ void ex_runtime(exarg_T *eap) { ! source_runtime(eap->arg, eap->forceit ? DIP_ALL : 0); } static void --- 2901,2938 ---- #endif /* ! * ":runtime [what] {name}" */ void ex_runtime(exarg_T *eap) { ! char_u *arg = eap->arg; ! char_u *p = skiptowhite(arg); ! int len = (int)(p - arg); ! int flags = eap->forceit ? DIP_ALL : 0; ! ! if (STRNCMP(arg, "START", len) == 0) ! { ! flags += DIP_START + DIP_NORTP; ! arg = skipwhite(arg + len); ! } ! else if (STRNCMP(arg, "OPT", len) == 0) ! { ! flags += DIP_OPT + DIP_NORTP; ! arg = skipwhite(arg + len); ! } ! else if (STRNCMP(arg, "PACK", len) == 0) ! { ! flags += DIP_START + DIP_OPT + DIP_NORTP; ! arg = skipwhite(arg + len); ! } ! else if (STRNCMP(arg, "ALL", len) == 0) ! { ! flags += DIP_START + DIP_OPT; ! arg = skipwhite(arg + len); ! } ! ! source_runtime(arg, flags); } static void *************** *** 3067,3081 **** void (*callback)(char_u *fname, void *ck), void *cookie) { ! int done; char_u *s; int len; char *start_dir = "pack/*/start/*/%s"; char *opt_dir = "pack/*/opt/*/%s"; ! done = do_in_path(p_rtp, name, flags, callback, cookie); ! if (done == FAIL && (flags & DIP_START)) { len = STRLEN(start_dir) + STRLEN(name); s = alloc(len); --- 3093,3108 ---- void (*callback)(char_u *fname, void *ck), void *cookie) { ! int done = FAIL; char_u *s; int len; char *start_dir = "pack/*/start/*/%s"; char *opt_dir = "pack/*/opt/*/%s"; ! if ((flags & DIP_NORTP) == 0) ! done = do_in_path(p_rtp, name, flags, callback, cookie); ! if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_START)) { len = STRLEN(start_dir) + STRLEN(name); s = alloc(len); *************** *** 3086,3092 **** vim_free(s); } ! if (done == FAIL && (flags & DIP_OPT)) { len = STRLEN(opt_dir) + STRLEN(name); s = alloc(len); --- 3113,3119 ---- vim_free(s); } ! if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_OPT)) { len = STRLEN(opt_dir) + STRLEN(name); s = alloc(len); *** ../vim-7.4.1552/src/vim.h 2016-03-12 22:11:34.247300195 +0100 --- src/vim.h 2016-03-12 22:27:03.381577532 +0100 *************** *** 2294,2298 **** --- 2294,2299 ---- #define DIP_ERR 0x04 /* give an error message when none found. */ #define DIP_START 0x08 /* also use "start" directory in 'packpath' */ #define DIP_OPT 0x10 /* also use "opt" directory in 'packpath' */ + #define DIP_NORTP 0x20 /* do not use 'runtimepath' */ #endif /* VIM__H */ *** ../vim-7.4.1552/runtime/doc/repeat.txt 2016-03-09 22:18:52.166442971 +0100 --- runtime/doc/repeat.txt 2016-03-12 22:20:49.305494588 +0100 *************** *** 175,184 **** {not in Vi} *:ru* *:runtime* ! :ru[ntime][!] {file} .. Read Ex commands from {file} in each directory given ! by 'runtimepath'. There is no error for non-existing ! files. Example: > :runtime syntax/c.vim < There can be multiple {file} arguments, separated by --- 182,193 ---- {not in Vi} *:ru* *:runtime* ! :ru[ntime][!] [where] {file} .. Read Ex commands from {file} in each directory given ! by 'runtimepath' and/or 'packpath'. There is no error ! for non-existing files. ! ! Example: > :runtime syntax/c.vim < There can be multiple {file} arguments, separated by *************** *** 192,197 **** --- 201,215 ---- When it is not included only the first found file is sourced. + When [where] is omitted only 'runtimepath' is used. + Other values: + START search under "start" in 'packpath' + OPT search under "opt" in 'packpath' + PACK search under "start" and "opt" in + 'packpath' + ALL first use 'runtimepath', then search + under "start" and "opt" in 'packpath' + When {file} contains wildcards it is expanded to all matching files. Example: > :runtime! plugin/*.vim *************** *** 231,236 **** --- 249,264 ---- Also see |pack-add|. + :packloadall[!] Load all packages in the "start" directories under + 'packpath'. The directories found are added to + 'runtimepath'. + This normally done during startup, after loading your + .vimrc file. With this command it can be done + earlier. + Packages will be loaded only once. After this command + it won't happen again. When the optional ! is added + this command will load packages even when done before. + See |packages|. :scripte[ncoding] [encoding] *:scripte* *:scriptencoding* *E167* Specify the character encoding used in the script. *************** *** 454,461 **** ones under "pack/foo/start". See |pack-add| below for how the "opt" directory is used. ! Loading packages will not happen if loading plugins is disabled, see ! |load-plugins|. Using a single plugin and loading it automatically ~ --- 482,494 ---- ones under "pack/foo/start". See |pack-add| below for how the "opt" directory is used. ! Loading packages automatically will not happen if loading plugins is disabled, ! see |load-plugins|. ! ! To load packages earlier, so that 'runtimepath' gets updated: > ! :packloadall ! This also works when loading plugins is disabled. The automatic loading will ! only happen once. Using a single plugin and loading it automatically ~ *** ../vim-7.4.1552/src/testdir/test_packadd.vim 2016-03-12 22:11:34.255300112 +0100 --- src/testdir/test_packadd.vim 2016-03-12 22:43:11.211445839 +0100 *************** *** 134,136 **** --- 134,183 ---- colorscheme three call assert_equal(1, g:found_three) endfunc + + func Test_runtime() + let rundir = &packpath . '/runtime/extra' + let startdir = &packpath . '/pack/mine/start/foo/extra' + let optdir = &packpath . '/pack/mine/opt/bar/extra' + call mkdir(rundir, 'p') + call mkdir(startdir, 'p') + call mkdir(optdir, 'p') + call writefile(['let g:sequence .= "run"'], rundir . '/bar.vim') + call writefile(['let g:sequence .= "start"'], startdir . '/bar.vim') + call writefile(['let g:sequence .= "foostart"'], startdir . '/foo.vim') + call writefile(['let g:sequence .= "opt"'], optdir . '/bar.vim') + call writefile(['let g:sequence .= "xxxopt"'], optdir . '/xxx.vim') + exe 'set rtp=' . &packpath . '/runtime' + + let g:sequence = '' + runtime extra/bar.vim + call assert_equal('run', g:sequence) + let g:sequence = '' + runtime START extra/bar.vim + call assert_equal('start', g:sequence) + let g:sequence = '' + runtime OPT extra/bar.vim + call assert_equal('opt', g:sequence) + let g:sequence = '' + runtime PACK extra/bar.vim + call assert_equal('start', g:sequence) + let g:sequence = '' + runtime! PACK extra/bar.vim + call assert_equal('startopt', g:sequence) + let g:sequence = '' + runtime PACK extra/xxx.vim + call assert_equal('xxxopt', g:sequence) + + let g:sequence = '' + runtime ALL extra/bar.vim + call assert_equal('run', g:sequence) + let g:sequence = '' + runtime ALL extra/foo.vim + call assert_equal('foostart', g:sequence) + let g:sequence = '' + runtime! ALL extra/xxx.vim + call assert_equal('xxxopt', g:sequence) + let g:sequence = '' + runtime! ALL extra/bar.vim + call assert_equal('runstartopt', g:sequence) + endfunc *** ../vim-7.4.1552/src/version.c 2016-03-12 22:11:34.255300112 +0100 --- src/version.c 2016-03-12 22:46:04.005634676 +0100 *************** *** 745,746 **** --- 745,748 ---- { /* Add new patch number below this line */ + /**/ + 1553, /**/ -- The only backup you need is the one that you didn't have time for. (Murphy) /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///