diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-03-06 14:44:08 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-03-06 14:44:08 +0100 |
commit | be82c254862e475a582c0717455e1db6bf96b0d0 (patch) | |
tree | 11dfa9bbaf41ce597a37afb20bbd7f1bcb3eb7d6 /src | |
parent | 2588b5a43f049ddf542991050260237051caad77 (diff) | |
download | vim-git-be82c254862e475a582c0717455e1db6bf96b0d0.tar.gz |
patch 7.4.1499v7.4.1499
Problem: No error message when :packadd does not find anything.
Solution: Add an error message. (Hirohito Higashi)
Diffstat (limited to 'src')
-rw-r--r-- | src/ex_cmds.h | 2 | ||||
-rw-r--r-- | src/ex_cmds2.c | 37 | ||||
-rw-r--r-- | src/globals.h | 1 | ||||
-rw-r--r-- | src/testdir/test_packadd.vim | 4 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 35 insertions, 11 deletions
diff --git a/src/ex_cmds.h b/src/ex_cmds.h index 24f83aade..c25ee2ee6 100644 --- 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, diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c index b6992b2bb..7a0d0bd94 100644 --- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -2918,8 +2918,7 @@ source_callback(char_u *fname, void *cookie UNUSED) /* * 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); } diff --git a/src/globals.h b/src/globals.h index 6fd86fba5..bd9ef5c87 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1577,6 +1577,7 @@ EXTERN char_u e_notset[] INIT(= N_("E764: Option '%s' is not set")); #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); diff --git a/src/testdir/test_packadd.vim b/src/testdir/test_packadd.vim index 091fec24b..a0a270149 100644 --- 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() diff --git a/src/version.c b/src/version.c index 1bcccd864..6ce39932a 100644 --- a/src/version.c +++ b/src/version.c @@ -744,6 +744,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1499, +/**/ 1498, /**/ 1497, |