Files
vim-gitgutter/autoload/gitgutter/hunk.vim
2014-10-17 09:24:47 +02:00

97 lines
2.0 KiB
VimL

" number of lines [added, modified, removed]
let s:summary = [0, 0, 0]
let s:hunks = []
function! gitgutter#hunk#set_hunks(hunks)
let s:hunks = a:hunks
endfunction
function! gitgutter#hunk#hunks()
return s:hunks
endfunction
function! gitgutter#hunk#summary()
return s:summary
endfunction
function! gitgutter#hunk#reset()
let s:summary = [0, 0, 0]
endfunction
function! gitgutter#hunk#increment_lines_added(count)
let s:summary[0] += a:count
endfunction
function! gitgutter#hunk#increment_lines_modified(count)
let s:summary[1] += a:count
endfunction
function! gitgutter#hunk#increment_lines_removed(count)
let s:summary[2] += a:count
endfunction
function! gitgutter#hunk#next_hunk(count)
if gitgutter#utility#is_active()
let current_line = line('.')
let hunk_count = 0
for hunk in s:hunks
if hunk[2] > current_line
let hunk_count += 1
if hunk_count == a:count
execute 'normal!' hunk[2] . 'G'
break
endif
endif
endfor
endif
endfunction
function! gitgutter#hunk#prev_hunk(count)
if gitgutter#utility#is_active()
let current_line = line('.')
let hunk_count = 0
for hunk in reverse(copy(s:hunks))
if hunk[2] < current_line
let hunk_count += 1
if hunk_count == a:count
let target = hunk[2] == 0 ? 1 : hunk[2]
execute 'normal!' target . 'G'
break
endif
endif
endfor
endif
endfunction
" Returns the hunk the cursor is currently in or 0 if the cursor isn't in a
" hunk.
function! gitgutter#hunk#current_hunk()
let current_hunk = []
for hunk in s:hunks
if gitgutter#hunk#cursor_in_hunk(hunk)
let current_hunk = hunk
break
endif
endfor
if len(current_hunk) == 4
return current_hunk
endif
endfunction
function! gitgutter#hunk#cursor_in_hunk(hunk)
let current_line = line('.')
if current_line == 1 && a:hunk[2] == 0
return 1
endif
if current_line >= a:hunk[2] && current_line < a:hunk[2] + (a:hunk[3] == 0 ? 1 : a:hunk[3])
return 1
endif
return 0
endfunction