mirror of
https://github.com/vim-airline/vim-airline.git
synced 2024-12-18 09:03:41 +08:00
d85d697b5f
Prior to this change airline set the function for getting hunks only once, which works as long as you don't use simlar plugins for different VCS at the same time. If that was the case, only one plugin would have won, depending on the first buffer handled by these plugins. And although the code for the other plugin was run every time, you would never see the actual line changes, since airline didn't even bother checking. Now these plugins can be used side-by-side in the same Vim instance, e.g. gitgutter for, well, git and signify for the rest.
84 lines
2.2 KiB
VimL
84 lines
2.2 KiB
VimL
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
|
|
" vim: et ts=2 sts=2 sw=2
|
|
|
|
if !get(g:, 'loaded_signify', 0) && !get(g:, 'loaded_gitgutter', 0) && !get(g:, 'loaded_changes', 0) && !get(g:, 'loaded_quickfixsigns', 0)
|
|
finish
|
|
endif
|
|
|
|
let s:non_zero_only = get(g:, 'airline#extensions#hunks#non_zero_only', 0)
|
|
let s:hunk_symbols = get(g:, 'airline#extensions#hunks#hunk_symbols', ['+', '~', '-'])
|
|
|
|
function! s:get_hunks_signify()
|
|
let hunks = sy#repo#get_stats()
|
|
if hunks[0] >= 0
|
|
return hunks
|
|
endif
|
|
return []
|
|
endfunction
|
|
|
|
function! s:is_branch_empty()
|
|
return exists('*airline#extensions#branch#head') && empty(airline#extensions#branch#head())
|
|
endfunction
|
|
|
|
function! s:get_hunks_gitgutter()
|
|
if !get(g:, 'gitgutter_enabled', 0) || s:is_branch_empty()
|
|
return ''
|
|
endif
|
|
return GitGutterGetHunkSummary()
|
|
endfunction
|
|
|
|
function! s:get_hunks_changes()
|
|
if !get(b:, 'changes_view_enabled', 0) || s:is_branch_empty()
|
|
return []
|
|
endif
|
|
let hunks = changes#GetStats()
|
|
for i in hunks
|
|
if i > 0
|
|
return hunks
|
|
endif
|
|
endfor
|
|
return []
|
|
endfunction
|
|
|
|
function! s:get_hunks_empty()
|
|
return ''
|
|
endfunction
|
|
|
|
function! s:get_hunks()
|
|
if !exists('b:source_func')
|
|
if get(g:, 'loaded_signify') && sy#buffer_is_active()
|
|
let b:source_func = 's:get_hunks_signify'
|
|
elseif exists('*GitGutterGetHunkSummary')
|
|
let b:source_func = 's:get_hunks_gitgutter'
|
|
elseif exists('*changes#GetStats')
|
|
let b:source_func = 's:get_hunks_changes'
|
|
elseif exists('*quickfixsigns#vcsdiff#GetHunkSummary')
|
|
let b:source_func = 'quickfixsigns#vcsdiff#GetHunkSummary'
|
|
else
|
|
let b:source_func = 's:get_hunks_empty'
|
|
endif
|
|
endif
|
|
return {b:source_func}()
|
|
endfunction
|
|
|
|
function! airline#extensions#hunks#get_hunks()
|
|
if !get(w:, 'airline_active', 0)
|
|
return ''
|
|
endif
|
|
let hunks = s:get_hunks()
|
|
let string = ''
|
|
if !empty(hunks)
|
|
for i in [0, 1, 2]
|
|
if s:non_zero_only == 0 || hunks[i] > 0
|
|
let string .= printf('%s%s ', s:hunk_symbols[i], hunks[i])
|
|
endif
|
|
endfor
|
|
endif
|
|
return string
|
|
endfunction
|
|
|
|
function! airline#extensions#hunks#init(ext)
|
|
call airline#parts#define_function('hunks', 'airline#extensions#hunks#get_hunks')
|
|
endfunction
|
|
|