aboutsummaryrefslogtreecommitdiff
path: root/vim/.vim/plugged/vim-gitgutter/autoload/gitgutter.vim
diff options
context:
space:
mode:
authorKumar Damani <damani.kumar@gmail.com>2019-04-26 18:49:26 +0000
committerKumar Damani <damani.kumar@gmail.com>2019-04-26 18:49:26 +0000
commit5a6ed5fcb3b89d0c2b4e8ba2953c4ba806d4b171 (patch)
tree5be0c043b0c8d632e35a8b4ef7e23452b103b94d /vim/.vim/plugged/vim-gitgutter/autoload/gitgutter.vim
parentaf821092fe78ef159d7cb6536bb006712dc01b9d (diff)
added vim dir
Diffstat (limited to 'vim/.vim/plugged/vim-gitgutter/autoload/gitgutter.vim')
-rw-r--r--vim/.vim/plugged/vim-gitgutter/autoload/gitgutter.vim160
1 files changed, 160 insertions, 0 deletions
diff --git a/vim/.vim/plugged/vim-gitgutter/autoload/gitgutter.vim b/vim/.vim/plugged/vim-gitgutter/autoload/gitgutter.vim
new file mode 100644
index 0000000..2e17fdb
--- /dev/null
+++ b/vim/.vim/plugged/vim-gitgutter/autoload/gitgutter.vim
@@ -0,0 +1,160 @@
+let s:t_string = type('')
+
+" Primary functions {{{
+
+function! gitgutter#all(force) abort
+ let visible = tabpagebuflist()
+
+ for bufnr in range(1, bufnr('$') + 1)
+ if buflisted(bufnr)
+ let file = expand('#'.bufnr.':p')
+ if !empty(file)
+ if index(visible, bufnr) != -1
+ call gitgutter#init_buffer(bufnr)
+ call gitgutter#process_buffer(bufnr, a:force)
+ elseif a:force
+ call s:reset_tick(bufnr)
+ endif
+ endif
+ endif
+ endfor
+endfunction
+
+
+" Finds the file's path relative to the repo root.
+function! gitgutter#init_buffer(bufnr)
+ if gitgutter#utility#is_active(a:bufnr)
+ let p = gitgutter#utility#repo_path(a:bufnr, 0)
+ if type(p) != s:t_string || empty(p)
+ call gitgutter#utility#set_repo_path(a:bufnr)
+ call s:setup_maps()
+ endif
+ endif
+endfunction
+
+
+function! gitgutter#process_buffer(bufnr, force) abort
+ " NOTE a:bufnr is not necessarily the current buffer.
+
+ if gitgutter#utility#is_active(a:bufnr)
+ if a:force || s:has_fresh_changes(a:bufnr)
+
+ let diff = ''
+ try
+ let diff = gitgutter#diff#run_diff(a:bufnr, 'index', 0)
+ catch /gitgutter not tracked/
+ call gitgutter#debug#log('Not tracked: '.gitgutter#utility#file(a:bufnr))
+ catch /gitgutter diff failed/
+ call gitgutter#debug#log('Diff failed: '.gitgutter#utility#file(a:bufnr))
+ call gitgutter#hunk#reset(a:bufnr)
+ endtry
+
+ if diff != 'async'
+ call gitgutter#diff#handler(a:bufnr, diff)
+ endif
+
+ endif
+ endif
+endfunction
+
+
+function! gitgutter#disable() abort
+ " get list of all buffers (across all tabs)
+ for bufnr in range(1, bufnr('$') + 1)
+ if buflisted(bufnr)
+ let file = expand('#'.bufnr.':p')
+ if !empty(file)
+ call s:clear(bufnr)
+ endif
+ endif
+ endfor
+
+ let g:gitgutter_enabled = 0
+endfunction
+
+function! gitgutter#enable() abort
+ let g:gitgutter_enabled = 1
+ call gitgutter#all(1)
+endfunction
+
+function! gitgutter#toggle() abort
+ if g:gitgutter_enabled
+ call gitgutter#disable()
+ else
+ call gitgutter#enable()
+ endif
+endfunction
+
+
+function! gitgutter#buffer_disable() abort
+ let bufnr = bufnr('')
+ call gitgutter#utility#setbufvar(bufnr, 'enabled', 0)
+ call s:clear(bufnr)
+endfunction
+
+function! gitgutter#buffer_enable() abort
+ let bufnr = bufnr('')
+ call gitgutter#utility#setbufvar(bufnr, 'enabled', 1)
+ call gitgutter#process_buffer(bufnr, 1)
+endfunction
+
+function! gitgutter#buffer_toggle() abort
+ if gitgutter#utility#getbufvar(bufnr(''), 'enabled', 1)
+ call gitgutter#buffer_disable()
+ else
+ call gitgutter#buffer_enable()
+ endif
+endfunction
+
+" }}}
+
+function! s:setup_maps()
+ if !g:gitgutter_map_keys
+ return
+ endif
+
+ if !hasmapto('<Plug>GitGutterPrevHunk') && maparg('[c', 'n') ==# ''
+ nmap <buffer> [c <Plug>GitGutterPrevHunk
+ endif
+ if !hasmapto('<Plug>GitGutterNextHunk') && maparg(']c', 'n') ==# ''
+ nmap <buffer> ]c <Plug>GitGutterNextHunk
+ endif
+
+ if !hasmapto('<Plug>GitGutterStageHunk') && maparg('<Leader>hs', 'n') ==# ''
+ nmap <buffer> <Leader>hs <Plug>GitGutterStageHunk
+ endif
+ if !hasmapto('<Plug>GitGutterUndoHunk') && maparg('<Leader>hu', 'n') ==# ''
+ nmap <buffer> <Leader>hu <Plug>GitGutterUndoHunk
+ endif
+ if !hasmapto('<Plug>GitGutterPreviewHunk') && maparg('<Leader>hp', 'n') ==# ''
+ nmap <buffer> <Leader>hp <Plug>GitGutterPreviewHunk
+ endif
+
+ if !hasmapto('<Plug>GitGutterTextObjectInnerPending') && maparg('ic', 'o') ==# ''
+ omap <buffer> ic <Plug>GitGutterTextObjectInnerPending
+ endif
+ if !hasmapto('<Plug>GitGutterTextObjectOuterPending') && maparg('ac', 'o') ==# ''
+ omap <buffer> ac <Plug>GitGutterTextObjectOuterPending
+ endif
+ if !hasmapto('<Plug>GitGutterTextObjectInnerVisual') && maparg('ic', 'x') ==# ''
+ xmap <buffer> ic <Plug>GitGutterTextObjectInnerVisual
+ endif
+ if !hasmapto('<Plug>GitGutterTextObjectOuterVisual') && maparg('ac', 'x') ==# ''
+ xmap <buffer> ac <Plug>GitGutterTextObjectOuterVisual
+ endif
+endfunction
+
+function! s:has_fresh_changes(bufnr) abort
+ return getbufvar(a:bufnr, 'changedtick') != gitgutter#utility#getbufvar(a:bufnr, 'tick')
+endfunction
+
+function! s:reset_tick(bufnr) abort
+ call gitgutter#utility#setbufvar(a:bufnr, 'tick', 0)
+endfunction
+
+function! s:clear(bufnr)
+ call gitgutter#sign#clear_signs(a:bufnr)
+ call gitgutter#sign#remove_dummy_sign(a:bufnr, 1)
+ call gitgutter#hunk#reset(a:bufnr)
+ call s:reset_tick(a:bufnr)
+endfunction