mirror of
https://github.com/amix/vimrc
synced 2025-06-23 15:04:59 +08:00
Updated plugins
This commit is contained in:
@ -1,3 +1,5 @@
|
||||
scriptencoding utf8
|
||||
|
||||
let s:nomodeline = (v:version > 703 || (v:version == 703 && has('patch442'))) ? '<nomodeline>' : ''
|
||||
|
||||
let s:hunk_re = '^@@ -\(\d\+\),\?\(\d*\) +\(\d\+\),\?\(\d*\) @@'
|
||||
@ -10,9 +12,6 @@ endfunction
|
||||
|
||||
let s:c_flag = s:git_supports_command_line_config_override()
|
||||
|
||||
|
||||
let s:temp_from = tempname()
|
||||
let s:temp_buffer = tempname()
|
||||
let s:counter = 0
|
||||
|
||||
" Returns a diff of the buffer against the index or the working tree.
|
||||
@ -76,6 +75,9 @@ function! gitgutter#diff#run_diff(bufnr, from, preserve_full_diff) abort
|
||||
throw 'gitgutter not tracked'
|
||||
endif
|
||||
|
||||
let temp_from = tempname()
|
||||
let temp_buffer = tempname()
|
||||
|
||||
" Wrap compound commands in parentheses to make Windows happy.
|
||||
" bash doesn't mind the parentheses.
|
||||
let cmd = '('
|
||||
@ -88,7 +90,7 @@ function! gitgutter#diff#run_diff(bufnr, from, preserve_full_diff) abort
|
||||
" second gitgutter#process_buffer() writing the file (synchronously, below)
|
||||
" and the first gitgutter#process_buffer()'s async job reading it (with
|
||||
" git-diff).
|
||||
let buff_file = s:temp_buffer.'.'.a:bufnr
|
||||
let buff_file = temp_buffer.'.'.a:bufnr
|
||||
|
||||
" Add a counter to avoid a similar race with two quick writes of the same buffer.
|
||||
" Use a modulus greater than a maximum reasonable number of visible buffers.
|
||||
@ -108,7 +110,7 @@ function! gitgutter#diff#run_diff(bufnr, from, preserve_full_diff) abort
|
||||
" Without the buffer number, from_file would have a race in the shell
|
||||
" between the second process writing it (with git-show) and the first
|
||||
" reading it (with git-diff).
|
||||
let from_file = s:temp_from.'.'.a:bufnr
|
||||
let from_file = temp_from.'.'.a:bufnr
|
||||
|
||||
" Add a counter to avoid a similar race with two quick writes of the same buffer.
|
||||
let from_file .= '.'.s:counter
|
||||
@ -118,7 +120,7 @@ function! gitgutter#diff#run_diff(bufnr, from, preserve_full_diff) abort
|
||||
endif
|
||||
|
||||
" Write file from index to temporary file.
|
||||
let index_name = g:gitgutter_diff_base.':'.gitgutter#utility#repo_path(a:bufnr, 1)
|
||||
let index_name = gitgutter#utility#get_diff_base(a:bufnr).':'.gitgutter#utility#repo_path(a:bufnr, 1)
|
||||
let cmd .= g:gitgutter_git_executable.' '.g:gitgutter_git_args.' --no-pager show '.index_name.' > '.from_file.' && '
|
||||
|
||||
elseif a:from ==# 'working_tree'
|
||||
@ -405,5 +407,3 @@ endfunction
|
||||
function! s:save_last_seen_change(bufnr) abort
|
||||
call gitgutter#utility#setbufvar(a:bufnr, 'tick', getbufvar(a:bufnr, 'changedtick'))
|
||||
endfunction
|
||||
|
||||
|
||||
|
@ -84,6 +84,20 @@ function! gitgutter#highlight#define_highlights() abort
|
||||
highlight default link GitGutterChangeDeleteInvisible GitGutterChangeInvisible
|
||||
|
||||
" When they are visible.
|
||||
|
||||
" If GitGutter* highlights are already defined, either by the user or the colourscheme,
|
||||
" set their backgrounds to the sign column's.
|
||||
for type in ["Add", "Change", "Delete"]
|
||||
if hlexists("GitGutter".type)
|
||||
" Were the highlight self-contained we could just declare the
|
||||
" background attributes and they would be merged. But it might be a
|
||||
" link, in which case it would be overwritten. So re-declare it in its
|
||||
" entirety.
|
||||
let [guifg, ctermfg] = s:get_foreground_colors('GitGutter'.type)
|
||||
execute "highlight GitGutter".type." guifg=".guifg." guibg=".guibg." ctermfg=".ctermfg." ctermbg=".ctermbg
|
||||
endif
|
||||
endfor
|
||||
|
||||
" By default use Diff* foreground colors with SignColumn's background.
|
||||
for type in ['Add', 'Change', 'Delete']
|
||||
let [guifg, ctermfg] = s:get_foreground_colors('Diff'.type)
|
||||
@ -107,6 +121,14 @@ function! gitgutter#highlight#define_highlights() abort
|
||||
" Highlights used intra line.
|
||||
highlight GitGutterAddIntraLine gui=reverse cterm=reverse
|
||||
highlight GitGutterDeleteIntraLine gui=reverse cterm=reverse
|
||||
" Set diff syntax colours (used in the preview window) - diffAdded,diffChanged,diffRemoved -
|
||||
" to match the signs, if not set aleady.
|
||||
for [dtype,type] in [['Added','Add'], ['Changed','Change'], ['Removed','Delete']]
|
||||
if !hlexists('diff'.dtype)
|
||||
let [guifg, ctermfg] = s:get_foreground_colors('GitGutter'.type)
|
||||
execute "highlight diff".dtype." guifg=".guifg." ctermfg=".ctermfg." guibg=NONE ctermbg=NONE"
|
||||
endif
|
||||
endfor
|
||||
endfunction
|
||||
|
||||
function! gitgutter#highlight#define_signs() abort
|
||||
|
@ -1,4 +1,6 @@
|
||||
let s:winid = 0
|
||||
let s:preview_bufnr = 0
|
||||
let s:nomodeline = (v:version > 703 || (v:version == 703 && has('patch442'))) ? '<nomodeline>' : ''
|
||||
|
||||
function! gitgutter#hunk#set_hunks(bufnr, hunks) abort
|
||||
call gitgutter#utility#setbufvar(a:bufnr, 'hunks', a:hunks)
|
||||
@ -172,6 +174,8 @@ endfunction
|
||||
|
||||
|
||||
function! gitgutter#hunk#stage(...) abort
|
||||
if !s:in_hunk_preview_window() && !gitgutter#utility#has_repo_path(bufnr('')) | return | endif
|
||||
|
||||
if a:0 && (a:1 != 1 || a:2 != line('$'))
|
||||
call s:hunk_op(function('s:stage'), a:1, a:2)
|
||||
else
|
||||
@ -181,11 +185,15 @@ function! gitgutter#hunk#stage(...) abort
|
||||
endfunction
|
||||
|
||||
function! gitgutter#hunk#undo() abort
|
||||
if !gitgutter#utility#has_repo_path(bufnr('')) | return | endif
|
||||
|
||||
call s:hunk_op(function('s:undo'))
|
||||
silent! call repeat#set("\<Plug>(GitGutterUndoHunk)", -1)
|
||||
endfunction
|
||||
|
||||
function! gitgutter#hunk#preview() abort
|
||||
if !gitgutter#utility#has_repo_path(bufnr('')) | return | endif
|
||||
|
||||
call s:hunk_op(function('s:preview'))
|
||||
silent! call repeat#set("\<Plug>(GitGutterPreviewHunk)", -1)
|
||||
endfunction
|
||||
@ -268,6 +276,10 @@ function! s:stage(hunk_diff)
|
||||
\ diff)
|
||||
if v:shell_error
|
||||
call gitgutter#utility#warn('patch does not apply')
|
||||
else
|
||||
if exists('#User#GitGutterStage')
|
||||
execute 'doautocmd' s:nomodeline 'User GitGutterStage'
|
||||
endif
|
||||
endif
|
||||
|
||||
" Refresh gitgutter's view of buffer.
|
||||
@ -430,7 +442,12 @@ function! s:open_hunk_preview_window()
|
||||
silent! wincmd P
|
||||
if !&previewwindow
|
||||
noautocmd execute g:gitgutter_preview_win_location &previewheight 'new gitgutter://hunk-preview'
|
||||
let s:winid = win_getid()
|
||||
doautocmd WinEnter
|
||||
if exists('*win_getid')
|
||||
let s:winid = win_getid()
|
||||
else
|
||||
let s:preview_bufnr = bufnr('')
|
||||
endif
|
||||
set previewwindow
|
||||
setlocal filetype=diff buftype=acwrite bufhidden=delete
|
||||
" Reset some defaults in case someone else has changed them.
|
||||
@ -499,18 +516,21 @@ endfunction
|
||||
function! s:enable_staging_from_hunk_preview_window()
|
||||
augroup gitgutter_hunk_preview
|
||||
autocmd!
|
||||
execute 'autocmd BufWriteCmd <buffer='.winbufnr(s:winid).'> GitGutterStageHunk'
|
||||
let bufnr = s:winid != 0 ? winbufnr(s:winid) : s:preview_bufnr
|
||||
execute 'autocmd BufWriteCmd <buffer='.bufnr.'> GitGutterStageHunk'
|
||||
augroup END
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:goto_original_window()
|
||||
noautocmd wincmd p
|
||||
doautocmd WinEnter
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:close_hunk_preview_window()
|
||||
call setbufvar(winbufnr(s:winid), '&modified', 0)
|
||||
let bufnr = s:winid != 0 ? winbufnr(s:winid) : s:preview_bufnr
|
||||
call setbufvar(bufnr, '&modified', 0)
|
||||
|
||||
if g:gitgutter_preview_win_floating
|
||||
if win_id2win(s:winid) > 0
|
||||
@ -521,4 +541,5 @@ function! s:close_hunk_preview_window()
|
||||
endif
|
||||
|
||||
let s:winid = 0
|
||||
let s:preview_bufnr = 0
|
||||
endfunction
|
||||
|
@ -9,25 +9,19 @@ endfunction
|
||||
function! gitgutter#utility#setbufvar(buffer, varname, val)
|
||||
let buffer = +a:buffer
|
||||
" Default value for getbufvar() was introduced in Vim 7.3.831.
|
||||
let bvars = getbufvar(buffer, '')
|
||||
if empty(bvars)
|
||||
let bvars = {}
|
||||
endif
|
||||
let dict = get(bvars, 'gitgutter', {})
|
||||
let needs_setting = empty(dict)
|
||||
let dict[a:varname] = a:val
|
||||
if needs_setting
|
||||
call setbufvar(buffer, 'gitgutter', dict)
|
||||
let ggvars = getbufvar(buffer, 'gitgutter')
|
||||
if type(ggvars) == type('')
|
||||
unlet ggvars
|
||||
let ggvars = {}
|
||||
call setbufvar(buffer, 'gitgutter', ggvars)
|
||||
endif
|
||||
let ggvars[a:varname] = a:val
|
||||
endfunction
|
||||
|
||||
function! gitgutter#utility#getbufvar(buffer, varname, ...)
|
||||
let bvars = getbufvar(a:buffer, '')
|
||||
if !empty(bvars)
|
||||
let dict = get(bvars, 'gitgutter', {})
|
||||
if has_key(dict, a:varname)
|
||||
return dict[a:varname]
|
||||
endif
|
||||
let ggvars = getbufvar(a:buffer, 'gitgutter')
|
||||
if type(ggvars) == type({}) && has_key(ggvars, a:varname)
|
||||
return ggvars[a:varname]
|
||||
endif
|
||||
if a:0
|
||||
return a:1
|
||||
@ -105,6 +99,10 @@ function! gitgutter#utility#system(cmd, ...) abort
|
||||
return output
|
||||
endfunction
|
||||
|
||||
function! gitgutter#utility#has_repo_path(bufnr)
|
||||
return index(['', -1, -2], gitgutter#utility#repo_path(a:bufnr, 0)) == -1
|
||||
endfunction
|
||||
|
||||
" Path of file relative to repo root.
|
||||
"
|
||||
" * empty string - not set
|
||||
@ -112,7 +110,7 @@ endfunction
|
||||
" * -1 - pending
|
||||
" * -2 - not tracked by git
|
||||
function! gitgutter#utility#repo_path(bufnr, shellesc) abort
|
||||
let p = gitgutter#utility#getbufvar(a:bufnr, 'path')
|
||||
let p = gitgutter#utility#getbufvar(a:bufnr, 'path', '')
|
||||
return a:shellesc ? gitgutter#utility#shellescape(p) : p
|
||||
endfunction
|
||||
|
||||
@ -186,8 +184,21 @@ function! s:restore_shell() abort
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! gitgutter#utility#get_diff_base(bufnr)
|
||||
let p = resolve(expand('#'.a:bufnr.':p'))
|
||||
let ml = matchlist(p, '\v^fugitive:/.*/(\x{40,})/')
|
||||
if !empty(ml) && !empty(ml[1])
|
||||
return ml[1].'^'
|
||||
endif
|
||||
return g:gitgutter_diff_base
|
||||
endfunction
|
||||
|
||||
function! s:abs_path(bufnr, shellesc)
|
||||
let p = resolve(expand('#'.a:bufnr.':p'))
|
||||
|
||||
" Remove extra parts from fugitive's filepaths
|
||||
let p = substitute(substitute(p, '^fugitive:', '', ''), '\v\.git/\x{40,}/', '', '')
|
||||
|
||||
return a:shellesc ? gitgutter#utility#shellescape(p) : p
|
||||
endfunction
|
||||
|
||||
|
Reference in New Issue
Block a user