Skip to content

Commit

Permalink
feature: Upgrade Plug
Browse files Browse the repository at this point in the history
  • Loading branch information
jvortmann committed Jun 8, 2016
1 parent 0e0b9cd commit d934f24
Showing 1 changed file with 46 additions and 24 deletions.
70 changes: 46 additions & 24 deletions autoload/plug.vim
Expand Up @@ -397,7 +397,20 @@ function! s:reorg_rtp()
endfunction

function! s:doautocmd(...)
execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '<nomodeline>' : '') join(a:000)
if exists('#'.join(a:000, '#'))
execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '<nomodeline>' : '') join(a:000)
endif
endfunction

function! s:dobufread(names)
for name in a:names
let path = s:rtp(g:plugs[name]).'/**'
for dir in ['ftdetect', 'ftplugin']
if len(finddir(dir, path))
return s:doautocmd('BufRead')
endif
endfor
endfor
endfunction

function! plug#load(...)
Expand All @@ -415,9 +428,7 @@ function! plug#load(...)
for name in a:000
call s:lod([name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
endfor
if exists('#BufRead')
doautocmd BufRead
endif
call s:dobufread(a:000)
return 1
endfunction

Expand Down Expand Up @@ -453,31 +464,27 @@ function! s:lod(names, types, ...)
endif
call s:source(rtp, a:2)
endif
if exists('#User#'.name)
call s:doautocmd('User', name)
endif
call s:doautocmd('User', name)
endfor
endfunction

function! s:lod_ft(pat, names)
let syn = 'syntax/'.a:pat.'.vim'
call s:lod(a:names, ['plugin', 'after/plugin'], syn, 'after/'.syn)
execute 'autocmd! PlugLOD FileType' a:pat
if exists('#filetypeplugin#FileType')
doautocmd filetypeplugin FileType
endif
if exists('#filetypeindent#FileType')
doautocmd filetypeindent FileType
endif
call s:doautocmd('filetypeplugin', 'FileType')
call s:doautocmd('filetypeindent', 'FileType')
endfunction

function! s:lod_cmd(cmd, bang, l1, l2, args, names)
call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
call s:dobufread(a:names)
execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args)
endfunction

function! s:lod_map(map, names, prefix)
call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
call s:dobufread(a:names)
let extra = ''
while 1
let c = getchar(0)
Expand All @@ -486,6 +493,13 @@ function! s:lod_map(map, names, prefix)
endif
let extra .= nr2char(c)
endwhile
if v:count
call feedkeys(v:count, 'n')
endif
call feedkeys('"'.v:register, 'n')
if mode(1) == 'no'
call feedkeys(v:operator)
endif
call feedkeys(a:prefix . substitute(a:map, '^<Plug>', "\<Plug>", '') . extra)
endfunction

Expand Down Expand Up @@ -722,15 +736,25 @@ function! s:assign_name()
silent! execute 'f' fnameescape(name)
endfunction

function! s:chsh(swap)
let prev = [&shell, &shellredir]
if !s:is_win && a:swap
set shell=sh shellredir=>%s\ 2>&1
endif
return prev
endfunction

function! s:bang(cmd, ...)
try
let [sh, shrd] = s:chsh(a:0)
" FIXME: Escaping is incomplete. We could use shellescape with eval,
" but it won't work on Windows.
let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd
let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd
let g:_plug_bang = '!'.escape(cmd, '#!%')
execute "normal! :execute g:_plug_bang\<cr>\<cr>"
finally
unlet g:_plug_bang
let [&shell, &shellredir] = [sh, shrd]
endtry
return v:shell_error ? 'Exit status: ' . v:shell_error : ''
endfunction
Expand Down Expand Up @@ -836,13 +860,14 @@ function! s:names(...)
endfunction

function! s:check_ruby()
silent! ruby require 'thread'; VIM::command('let g:plug_ruby = 1')
if get(g:, 'plug_ruby', 0)
unlet g:plug_ruby
return 1
silent! ruby require 'thread'; VIM::command("let g:plug_ruby = '#{RUBY_VERSION}'")
if !exists('g:plug_ruby')
redraw!
return s:warn('echom', 'Warning: Ruby interface is broken')
endif
redraw!
return s:warn('echom', 'Warning: Ruby interface is broken')
let ruby_version = split(g:plug_ruby, '\.')
unlet g:plug_ruby
return s:version_requirement(ruby_version, [1, 8, 7])
endfunction

function! s:update_impl(pull, force, args) abort
Expand Down Expand Up @@ -1823,10 +1848,7 @@ endfunction

function! s:system(cmd, ...)
try
let [sh, shrd] = [&shell, &shellredir]
if !s:is_win
set shell=sh shellredir=>%s\ 2>&1
endif
let [sh, shrd] = s:chsh(1)
let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd
return system(s:is_win ? '('.cmd.')' : cmd)
finally
Expand Down

0 comments on commit d934f24

Please sign in to comment.