diff --git a/autoload/airline/extensions/hunks.vim b/autoload/airline/extensions/hunks.vim index 367c9a97..57e08321 100644 --- a/autoload/airline/extensions/hunks.vim +++ b/autoload/airline/extensions/hunks.vim @@ -4,38 +4,43 @@ 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', ['+', '~', '-']) -let s:initialized = 0 -function! s:init() - if !s:initialized - let s:initialized = 1 +function! s:get_hunks_signify() + let hunks = sy#repo#get_stats() + if hunks[0] >= 0 + return hunks + endif + return [] +endfunction + +function! s:get_hunks_gitgutter() + if !get(g:, 'gitgutter_enabled', 0) + return '' + endif + return GitGutterGetHunkSummary() +endfunction + +function! s:get_hunks_empty() + return '' +endfunction + +let s:source_func = '' +function! s:get_hunks() + if empty(s:source_func) if get(g:, 'loaded_signify', 0) - function! s:get_hunks() - let hunks = sy#repo#get_stats() - if hunks[0] >= 0 - return hunks - endif - return [] - endfunction + let s:source_func = 's:get_hunks_signify' elseif exists('*GitGutterGetHunkSummary') - function! s:get_hunks() - if !get(g:, 'gitgutter_enabled', 0) - return '' - endif - return GitGutterGetHunkSummary() - endfunction + let s:source_func = 's:get_hunks_gitgutter' else - function! s:get_hunks() - return [] - endfunction + let s:source_func = 's:get_hunks_empty' endif endif + return {s:source_func}() endfunction function! airline#extensions#hunks#get_hunks() if !get(w:, 'airline_active', 0) return '' endif - call init() let hunks = s:get_hunks() let string = '' if !empty(hunks)