Mercurial > vim
changeset 8416:1a6527cce675 v7.4.1499
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Mar 6 14:44:08 2016 +0100
patch 7.4.1499
Problem: No error message when :packadd does not find anything.
Solution: Add an error message. (Hirohito Higashi)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 06 Mar 2016 14:45:04 +0100 |
parents | e4cd8ab5610d |
children | c7d9934d09e3 |
files | runtime/doc/repeat.txt src/ex_cmds.h src/ex_cmds2.c src/globals.h src/testdir/test_packadd.vim src/version.c |
diffstat | 6 files changed, 37 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/doc/repeat.txt +++ b/runtime/doc/repeat.txt @@ -213,7 +213,7 @@ For writing a Vim script, see chapter 41 about each searched file. {not in Vi} - *:pa* *:packadd* + *:pa* *:packadd* *E919* :pa[ckadd][!] {name} Search for an optional plugin directory in 'packpath' and source any plugin files found. The directory must match:
--- a/src/ex_cmds.h +++ b/src/ex_cmds.h @@ -1012,7 +1012,7 @@ EX(CMD_print, "print", ex_print, RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN|SBOXOK, ADDR_LINES), EX(CMD_packadd, "packadd", ex_packadd, - BANG|FILE1|TRLBAR|SBOXOK|CMDWIN, + BANG|FILE1|NEEDARG|TRLBAR|SBOXOK|CMDWIN, ADDR_LINES), EX(CMD_pclose, "pclose", ex_pclose, BANG|TRLBAR,
--- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -2918,8 +2918,7 @@ source_callback(char_u *fname, void *coo /* * Source the file "name" from all directories in 'runtimepath'. * "name" can contain wildcards. - * When "flags" has DIP_ALL: source all files, otherwise only the first one. - * When "flags" has DIP_DIR: find directories instead of files. + * When "all" is TRUE: source all files, otherwise only the first one. * * return FAIL when no file could be sourced, OK otherwise. */ @@ -2931,7 +2930,18 @@ source_runtime(char_u *name, int all) #define DIP_ALL 1 /* all matches, not just the first one */ #define DIP_DIR 2 /* find directories instead of files. */ - +#define DIP_ERR 4 /* give an error message when none found. */ + +/* + * Find the file "name" in all directories in "path" and invoke + * "callback(fname, cookie)". + * "name" can contain wildcards. + * When "flags" has DIP_ALL: source all files, otherwise only the first one. + * When "flags" has DIP_DIR: find directories instead of files. + * When "flags" has DIP_ERR: give an error message if there is no match. + * + * return FAIL when no file could be sourced, OK otherwise. + */ static int do_in_path( char_u *path, @@ -3022,11 +3032,18 @@ do_in_path( } vim_free(buf); vim_free(rtp_copy); - if (p_verbose > 0 && !did_one && name != NULL) + if (!did_one && name != NULL) { - verbose_enter(); - smsg((char_u *)_("not found in 'runtimepath': \"%s\""), name); - verbose_leave(); + char *basepath = path == p_rtp ? "runtimepath" : "packpath"; + + if (flags & DIP_ERR) + EMSG3(_(e_dirnotf), basepath, name); + else if (p_verbose > 0) + { + verbose_enter(); + smsg((char_u *)_("not found in '%s': \"%s\""), basepath, name); + verbose_leave(); + } } #ifdef AMIGA @@ -3178,8 +3195,8 @@ theend: void source_packages() { - do_in_path(p_pp, (char_u *)"pack/*/ever/*", - DIP_ALL + DIP_DIR, add_pack_plugin, p_pp); + do_in_path(p_pp, (char_u *)"pack/*/ever/*", DIP_ALL + DIP_DIR, + add_pack_plugin, p_pp); } /* @@ -3197,8 +3214,8 @@ ex_packadd(exarg_T *eap) if (pat == NULL) return; vim_snprintf(pat, len, plugpat, eap->arg); - do_in_path(p_pp, (char_u *)pat, DIP_ALL + DIP_DIR, add_pack_plugin, - eap->forceit ? NULL : p_pp); + do_in_path(p_pp, (char_u *)pat, DIP_ALL + DIP_DIR + DIP_ERR, + add_pack_plugin, eap->forceit ? NULL : p_pp); vim_free(pat); }
--- a/src/globals.h +++ b/src/globals.h @@ -1577,6 +1577,7 @@ EXTERN char_u e_notset[] INIT(= N_("E764 #ifndef FEAT_CLIPBOARD EXTERN char_u e_invalidreg[] INIT(= N_("E850: Invalid register name")); #endif +EXTERN char_u e_dirnotf[] INIT(= N_("E919: Directory not found in '%s': \"%s\"")); #ifdef MACOS_X_UNIX EXTERN short disallow_gui INIT(= FALSE);
--- a/src/testdir/test_packadd.vim +++ b/src/testdir/test_packadd.vim @@ -31,6 +31,10 @@ func Test_packadd() call assert_equal(17, g:ftdetect_works) call assert_true(len(&rtp) > len(rtp)) call assert_true(&rtp =~ 'testdir/Xdir/pack/mine/opt/mytest\($\|,\)') + + " Check exception + call assert_fails("packadd directorynotfound", 'E919:') + call assert_fails("packadd", 'E471:') endfunc func Test_packadd_noload()