diff --git a/autoload/vundle.vim b/autoload/vundle.vim index 216ee1b6..5e11918f 100644 --- a/autoload/vundle.vim +++ b/autoload/vundle.vim @@ -16,6 +16,9 @@ com! -nargs=? -bang -complete=custom,vundle#scripts#complete BundleSearch com! -nargs=? -bang -complete=custom,vundle#scripts#complete Bundles \ call vundle#scripts#all('!'=='', ) +com! -nargs=1 -bang BundleMake +\ call vundle#config#add_make_cmd() + com! -nargs=0 -bang BundleList \ call vundle#installer#list('!'=='') diff --git a/autoload/vundle/config.vim b/autoload/vundle/config.vim index e8443c1f..3695a057 100644 --- a/autoload/vundle/config.vim +++ b/autoload/vundle/config.vim @@ -27,6 +27,11 @@ func! vundle#config#init_bundle(name, opts) return extend(opts, copy(s:bundle)) endf +func! vundle#config#add_make_cmd(cmd) + " TODO: handle error + call g:bundles[-1].set_make_cmd(a:cmd) +endf + func! s:parse_options(opts) " TODO: improve this if len(a:opts) != 1 | return {} | endif @@ -84,6 +89,10 @@ endf let s:bundle = {} +func! s:bundle.set_make_cmd(cmd) + call extend(self, {'make_cmd': a:cmd}) +endf + func! s:bundle.path() return s:expand_path(g:bundle_dir.'/'.self.name) endf diff --git a/autoload/vundle/installer.vim b/autoload/vundle/installer.vim index ce9db385..682ef5be 100644 --- a/autoload/vundle/installer.vim +++ b/autoload/vundle/installer.vim @@ -4,14 +4,14 @@ func! vundle#installer#new(bang, ...) abort \ map(copy(a:000), 'vundle#config#init_bundle(v:val, {})') let names = vundle#scripts#bundle_names(map(copy(bundles), 'v:val.name_spec')) - call vundle#scripts#view('Installer',['" Installing bundles to '.expand(g:bundle_dir)], names + ['Helptags']) + let make_cmds = vundle#scripts#bundle_make_cmds(bundles) + call vundle#scripts#view('Installer',['" Installing bundles to '.expand(g:bundle_dir)], names + make_cmds + ['Helptags']) call s:process(a:bang, (a:bang ? 'add!' : 'add')) call vundle#config#require(bundles) endf - func! s:process(bang, cmd) let msg = '' @@ -96,6 +96,20 @@ func! vundle#installer#install(bang, name) abort return s:sync(a:bang, b) endf +func! vundle#installer#make(name) abort + call s:log(' ') + call s:log('Make: '.a:name) + + let b = filter(copy(g:bundles), 'v:val.name_spec ==? "'.a:name.'"')[0] + + try + silent exec b.make_cmd + return 'updated' + catch + return 'error' + endtry +endf + func! vundle#installer#docs() abort call vundle#installer#helptags(g:bundles) return 'updated' diff --git a/autoload/vundle/scripts.vim b/autoload/vundle/scripts.vim index 658944be..fc5010b6 100644 --- a/autoload/vundle/scripts.vim +++ b/autoload/vundle/scripts.vim @@ -33,10 +33,15 @@ func! s:view_log() wincmd P | wincmd H endf -func vundle#scripts#bundle_names(names) +func! vundle#scripts#bundle_names(names) return map(copy(a:names), ' printf("Bundle ' ."'%s'".'", v:val) ') endf +func! vundle#scripts#bundle_make_cmds(bundles) + let bundles_with_make = filter(copy(a:bundles), 'has_key(v:val, "make_cmd")') + return map(bundles_with_make, ' printf("Make ' ."'%s'".' '.'", v:val.name_spec) ') +endf + func! vundle#scripts#view(title, headers, results) if exists('g:vundle_view') && bufloaded(g:vundle_view) exec g:vundle_view.'bd!' @@ -61,6 +66,7 @@ func! vundle#scripts#view(title, headers, results) setl syntax=vim syn keyword vimCommand Bundle syn keyword vimCommand Helptags + syn keyword vimCommand Make com! -buffer -bang -nargs=1 DeleteBundle \ call vundle#installer#run('vundle#installer#delete', split(,',')[0], ['!' == '', ]) @@ -71,6 +77,9 @@ func! vundle#scripts#view(title, headers, results) com! -buffer -bang -nargs=? InstallBundle \ call vundle#installer#run('vundle#installer#install', split(,',')[0], ['!' == '', ]) + com! -buffer -bar -bang -nargs=1 InstallMake + \ call vundle#installer#run('vundle#installer#make', split(,',')[0], [split(,',')[0]]) + com! -buffer -bang -nargs=0 InstallHelptags \ call vundle#installer#run('vundle#installer#docs', 'helptags', []) diff --git a/test/vimrc b/test/vimrc index d0ff49c6..37118876 100644 --- a/test/vimrc +++ b/test/vimrc @@ -52,6 +52,10 @@ Bundle 'rstacruz/sparkup.git', {'rtp': 'vim/'} " Camel case Bundle 'vim-scripts/RubySinatra' +Bundle 'wincent/Command-T.git' +BundleMake :ruby puts( cmd = "cd #{File.expand_path($LOAD_PATH.grep(/command-?t/i).first)}/command-t/ && git checkout -f master && ruby extconf.rb && make clean && make"); + \ system(cmd) + filetype plugin indent on " Automatically detect file types. set wildignore+=doc " should not break helptags