Improve progress bar format
This commit is contained in:
parent
0df48bbb4d
commit
d37c7a47d7
1 changed files with 17 additions and 12 deletions
29
plug.vim
29
plug.vim
|
@ -179,11 +179,13 @@ function! s:syntax()
|
|||
syntax region plug2 start=/\%2l/ end=/\%3l/ contains=ALL
|
||||
syn match plugNumber /[0-9]\+[0-9.]*/ containedin=plug1 contained
|
||||
syn match plugBracket /[[\]]/ containedin=plug2 contained
|
||||
syn match plugX /x/ containedin=plug2 contained
|
||||
syn match plugDash /^-/
|
||||
syn match plugName /\(^- \)\@<=[^:]*/
|
||||
syn match plugError /^- [^:]\+: (x).*/
|
||||
hi def link plug1 Title
|
||||
hi def link plug2 Repeat
|
||||
hi def link plugX Exception
|
||||
hi def link plugBracket Structure
|
||||
hi def link plugNumber Number
|
||||
hi def link plugDash Special
|
||||
|
@ -229,13 +231,12 @@ function! s:assign_name()
|
|||
endfunction
|
||||
|
||||
function! s:finish()
|
||||
call append(line('$'), '')
|
||||
call append(line('$'), 'Finishing ... ')
|
||||
call append(3, '- Finishing ... ')
|
||||
redraw
|
||||
call s:apply()
|
||||
call s:syntax()
|
||||
call setline(line('$'), getline(line('$')) . 'Done!')
|
||||
normal! G
|
||||
call setline(4, getline(4) . 'Done!')
|
||||
normal! gg
|
||||
endfunction
|
||||
|
||||
function! s:update_impl(pull, args)
|
||||
|
@ -271,10 +272,10 @@ function! s:extend(names)
|
|||
return filter(copy(g:plugs), '!has_key(prev, v:key)')
|
||||
endfunction
|
||||
|
||||
function! s:update_progress(pull, cnt, total)
|
||||
function! s:update_progress(pull, cnt, bar, total)
|
||||
call setline(1, (a:pull ? 'Updating' : 'Installing').
|
||||
\ " plugins (".a:cnt."/".a:total.")")
|
||||
call s:progress_bar(2, a:cnt, a:total)
|
||||
call s:progress_bar(2, a:bar, a:total)
|
||||
normal! 2G
|
||||
redraw
|
||||
endfunction
|
||||
|
@ -285,6 +286,7 @@ function! s:update_serial(pull)
|
|||
let todo = copy(g:plugs)
|
||||
let total = len(todo)
|
||||
let done = {}
|
||||
let bar = ''
|
||||
|
||||
while !empty(todo)
|
||||
for [name, spec] in items(todo)
|
||||
|
@ -317,14 +319,15 @@ function! s:update_serial(pull)
|
|||
if error
|
||||
let result = '(x) ' . result
|
||||
endif
|
||||
let bar .= error ? 'x' : '='
|
||||
call append(3, '- ' . name . ': ' . result)
|
||||
call s:update_progress(a:pull, len(done), total)
|
||||
call s:update_progress(a:pull, len(done), bar, total)
|
||||
endfor
|
||||
|
||||
if !empty(s:extend(keys(todo)))
|
||||
let todo = filter(copy(g:plugs), '!has_key(done, v:key)')
|
||||
let total += len(todo)
|
||||
call s:update_progress(a:pull, len(done), total)
|
||||
call s:update_progress(a:pull, len(done), bar, total)
|
||||
else
|
||||
break
|
||||
endif
|
||||
|
@ -349,6 +352,7 @@ function! s:update_parallel(pull, threads)
|
|||
cd = iswin ? 'cd /d' : 'cd'
|
||||
done = {}
|
||||
tot = 0
|
||||
bar = ''
|
||||
skip = 'Already installed'
|
||||
mtx = Mutex.new
|
||||
take1 = proc { mtx.synchronize { running && all.shift } }
|
||||
|
@ -356,12 +360,13 @@ function! s:update_parallel(pull, threads)
|
|||
cnt = done.length
|
||||
tot = VIM::evaluate('len(g:plugs)') || tot
|
||||
$curbuf[1] = "#{pull ? 'Updating' : 'Installing'} plugins (#{cnt}/#{tot})"
|
||||
$curbuf[2] = '[' + ('=' * cnt).ljust(tot) + ']'
|
||||
$curbuf[2] = '[' + bar.ljust(tot) + ']'
|
||||
VIM::command('normal! 2G')
|
||||
VIM::command('redraw') unless iswin
|
||||
}
|
||||
log = proc { |name, result, ok|
|
||||
mtx.synchronize do
|
||||
bar += ok ? '=' : 'x'
|
||||
done[name] = true
|
||||
result = '(x) ' + result unless ok
|
||||
result = "- #{name}: #{result}"
|
||||
|
@ -479,8 +484,8 @@ function! s:glob_dir(path)
|
|||
return map(filter(split(globpath(a:path, '**'), '\n'), 'isdirectory(v:val)'), 's:dirpath(v:val)')
|
||||
endfunction
|
||||
|
||||
function! s:progress_bar(line, cnt, total)
|
||||
call setline(a:line, '[' . s:lpad(repeat('=', a:cnt), a:total) . ']')
|
||||
function! s:progress_bar(line, bar, total)
|
||||
call setline(a:line, '[' . s:lpad(a:bar, a:total) . ']')
|
||||
endfunction
|
||||
|
||||
function! s:git_valid(spec, cd)
|
||||
|
@ -524,7 +529,7 @@ function! s:clean(force)
|
|||
call add(dirs, spec.dir)
|
||||
endif
|
||||
let cnt += 1
|
||||
call s:progress_bar(2, cnt, total)
|
||||
call s:progress_bar(2, repeat('=', cnt), total)
|
||||
redraw
|
||||
endfor
|
||||
|
||||
|
|
Loading…
Reference in a new issue