diff --git a/README.md b/README.md index d45d86cb..89dc995b 100644 --- a/README.md +++ b/README.md @@ -163,7 +163,7 @@ vim-airline integrates with a variety of plugins out of the box. These extensio #### [syntastic][5] ![image](https://f.cloud.github.com/assets/306502/962864/9824c484-04f7-11e3-9928-da94f8c7da5a.png) -#### hunks ([vim-gitgutter][29] & [vim-signify][30] & [coc-git][59]) +#### hunks ([vim-gitgutter][29], [vim-signify][30], [coc-git][59] & [gitsigns.nvim][63]) ![image](https://f.cloud.github.com/assets/306502/995185/73fc7054-09b9-11e3-9d45-618406c6ed98.png) #### [vimagit][50] @@ -369,3 +369,4 @@ If you are interested in becoming a maintainer (we always welcome more maintaine [60]: https://github.com/cdelledonne/vim-cmake [61]: http://github.com/lambdalisue/battery.vim/ [62]: http://github.com/rbong/vim-flog/ +[63]: https://github.com/lewis6991/gitsigns.nvim diff --git a/autoload/airline/extensions.vim b/autoload/airline/extensions.vim index ba9994bc..8e7a2f7e 100644 --- a/autoload/airline/extensions.vim +++ b/autoload/airline/extensions.vim @@ -234,6 +234,7 @@ function! airline#extensions#load() \ || exists('g:loaded_gitgutter') \ || exists('g:loaded_changes') \ || exists('g:loaded_quickfixsigns') + \ || exists(':Gitsigns') \ || exists(':CocCommand')) call airline#extensions#hunks#init(s:ext) call add(s:loaded_ext, 'hunks') diff --git a/autoload/airline/extensions/hunks.vim b/autoload/airline/extensions/hunks.vim index 4439da44..9957f6f7 100644 --- a/autoload/airline/extensions/hunks.vim +++ b/autoload/airline/extensions/hunks.vim @@ -1,5 +1,6 @@ " MIT License. Copyright (c) 2013-2021 Bailey Ling et al. -" Plugin: vim-gitgutter, vim-signify, changesPlugin, quickfixsigns, coc-git +" Plugin: vim-gitgutter, vim-signify, changesPlugin, quickfixsigns, coc-git, +" gitsigns.nvim " vim: et ts=2 sts=2 sw=2 scriptencoding utf-8 @@ -8,6 +9,7 @@ if !get(g:, 'loaded_signify', 0) \ && !get(g:, 'loaded_gitgutter', 0) \ && !get(g:, 'loaded_changes', 0) \ && !get(g:, 'loaded_quickfixsigns', 0) + \ && !exists(':Gitsigns') \ && !exists("*CocAction") finish endif @@ -26,21 +28,12 @@ function! s:coc_git_enabled() abort return 1 endfunction -function! s:get_hunks_signify() abort - let hunks = sy#repo#get_stats() - if hunks[0] >= 0 - return hunks - endif - return [] -endfunction - -function! s:get_hunks_coc() abort - let hunks = get(b:, 'coc_git_status', '') - if empty(hunks) +function! s:parse_hunk_status(hunks) abort + if empty(a:hunks) return [] endif let result = [0, 0, 0] - for val in split(hunks) + for val in split(a:hunks) if val[0] is# '+' let result[0] = val[1:] + 0 elseif val[0] is# '~' @@ -52,6 +45,14 @@ function! s:get_hunks_coc() abort return result endfunction +function! s:get_hunks_signify() abort + let hunks = sy#repo#get_stats() + if hunks[0] >= 0 + return hunks + endif + return [] +endfunction + function! s:get_hunks_gitgutter() abort let hunks = GitGutterGetHunkSummary() return hunks == [0, 0, 0] ? [] : hunks @@ -62,6 +63,16 @@ function! s:get_hunks_changes() abort return hunks == [0, 0, 0] ? [] : hunks endfunction +function! s:get_hunks_gitsigns() abort + let hunks = get(b:, 'gitsigns_status', '') + return s:parse_hunk_status(hunks) +endfunction + +function! s:get_hunks_coc() abort + let hunks = get(b:, 'coc_git_status', '') + return s:parse_hunk_status(hunks) +endfunction + function! s:get_hunks_empty() abort return '' endfunction @@ -76,6 +87,8 @@ function! airline#extensions#hunks#get_raw_hunks() abort let b:source_func = 's:get_hunks_changes' elseif exists('*quickfixsigns#vcsdiff#GetHunkSummary') let b:source_func = 'quickfixsigns#vcsdiff#GetHunkSummary' + elseif exists(':Gitsigns') + let b:source_func = 's:get_hunks_gitsigns' elseif s:coc_git_enabled() let b:source_func = 's:get_hunks_coc' else @@ -97,6 +110,7 @@ function! airline#extensions#hunks#get_hunks() abort \ get(b:, 'source_func', '') isnot# 's:get_hunks_gitgutter' && \ get(b:, 'source_func', '') isnot# 's:get_hunks_empty' && \ get(b:, 'source_func', '') isnot# 's:get_hunks_changes' && + \ get(b:, 'source_func', '') isnot# 's:get_hunks_gitsigns' && \ get(b:, 'source_func', '') isnot# 's:get_hunks_coc' return b:airline_hunks endif diff --git a/doc/airline.txt b/doc/airline.txt index 7979a375..56a0a3de 100644 --- a/doc/airline.txt +++ b/doc/airline.txt @@ -838,6 +838,7 @@ vim-signify changesPlugin quickfixsigns coc-git +gitsigns.nvim You can use `airline#extensions#hunks#get_raw_hunks()` to get the full hunks, without shortening. This allows for advanced customization, or a quick way of