mirror of
https://github.com/tpope/vim-fugitive.git
synced 2025-11-12 13:23:52 -05:00
Replace 'cursorbind' in blame with manual line syncing
This is the only way to sync the line without also syncing the column. Syncing the column is particularly problematic when it causes the blame window to vertically scroll while typing.
This commit is contained in:
@@ -6924,9 +6924,6 @@ function! s:BlameSubcommand(line1, count, range, bang, mods, options) abort
|
|||||||
call add(restore, 'call setwinvar(bufwinnr('.winbufnr(winnr).'),"&foldenable",1)')
|
call add(restore, 'call setwinvar(bufwinnr('.winbufnr(winnr).'),"&foldenable",1)')
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
if exists('+cursorbind') && !&l:cursorbind && getwinvar(winnr, '&cursorbind')
|
|
||||||
call setwinvar(winnr, '&cursorbind', 0)
|
|
||||||
endif
|
|
||||||
if s:BlameBufnr(winbufnr(winnr)) > 0
|
if s:BlameBufnr(winbufnr(winnr)) > 0
|
||||||
execute winbufnr(winnr).'bdelete'
|
execute winbufnr(winnr).'bdelete'
|
||||||
endif
|
endif
|
||||||
@@ -6935,9 +6932,6 @@ function! s:BlameSubcommand(line1, count, range, bang, mods, options) abort
|
|||||||
if !&l:scrollbind
|
if !&l:scrollbind
|
||||||
call add(restore, 'call setwinvar(' . restore_winnr . ',"&scrollbind",0)')
|
call add(restore, 'call setwinvar(' . restore_winnr . ',"&scrollbind",0)')
|
||||||
endif
|
endif
|
||||||
if exists('+cursorbind') && !&l:cursorbind
|
|
||||||
call add(restore, 'call setwinvar(' . restore_winnr . ',"&cursorbind",0)')
|
|
||||||
endif
|
|
||||||
if &l:wrap
|
if &l:wrap
|
||||||
call add(restore, 'call setwinvar(' . restore_winnr . ',"&wrap",1)')
|
call add(restore, 'call setwinvar(' . restore_winnr . ',"&wrap",1)')
|
||||||
endif
|
endif
|
||||||
@@ -6945,9 +6939,6 @@ function! s:BlameSubcommand(line1, count, range, bang, mods, options) abort
|
|||||||
call add(restore, 'call setwinvar(' . restore_winnr . ',"&foldenable",1)')
|
call add(restore, 'call setwinvar(' . restore_winnr . ',"&foldenable",1)')
|
||||||
endif
|
endif
|
||||||
setlocal scrollbind nowrap nofoldenable
|
setlocal scrollbind nowrap nofoldenable
|
||||||
if exists('+cursorbind')
|
|
||||||
setlocal cursorbind
|
|
||||||
endif
|
|
||||||
let top = line('w0') + &scrolloff
|
let top = line('w0') + &scrolloff
|
||||||
let current = line('.')
|
let current = line('.')
|
||||||
exe 'silent keepalt' (a:bang ? s:Mods(mods) . 'split' : s:Mods(mods, 'leftabove') . 'vsplit') s:fnameescape(temp)
|
exe 'silent keepalt' (a:bang ? s:Mods(mods) . 'split' : s:Mods(mods, 'leftabove') . 'vsplit') s:fnameescape(temp)
|
||||||
@@ -6955,9 +6946,6 @@ function! s:BlameSubcommand(line1, count, range, bang, mods, options) abort
|
|||||||
execute top
|
execute top
|
||||||
normal! zt
|
normal! zt
|
||||||
execute current
|
execute current
|
||||||
if exists('+cursorbind')
|
|
||||||
setlocal cursorbind
|
|
||||||
endif
|
|
||||||
setlocal nonumber scrollbind nowrap foldcolumn=0 nofoldenable winfixwidth
|
setlocal nonumber scrollbind nowrap foldcolumn=0 nofoldenable winfixwidth
|
||||||
if exists('+relativenumber')
|
if exists('+relativenumber')
|
||||||
setlocal norelativenumber
|
setlocal norelativenumber
|
||||||
@@ -7198,10 +7186,27 @@ function! fugitive#BlameFileType() abort
|
|||||||
call s:BlameMaps(1)
|
call s:BlameMaps(1)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:BlameCursorSync(bufnr, line) abort
|
||||||
|
if a:line == line('.')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if get(s:TempState(), 'origin_bufnr') == a:bufnr || get(s:TempState(a:bufnr), 'origin_bufnr') == bufnr('')
|
||||||
|
if &startofline
|
||||||
|
execute a:line
|
||||||
|
else
|
||||||
|
let pos = getpos('.')
|
||||||
|
let pos[1] = a:line
|
||||||
|
call setpos('.', pos)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
augroup fugitive_blame
|
augroup fugitive_blame
|
||||||
autocmd!
|
autocmd!
|
||||||
autocmd ColorScheme,GUIEnter * call s:BlameRehighlight()
|
autocmd ColorScheme,GUIEnter * call s:BlameRehighlight()
|
||||||
autocmd BufWinLeave * execute getwinvar(+bufwinnr(+expand('<abuf>')), 'fugitive_leave')
|
autocmd BufWinLeave * execute getwinvar(+bufwinnr(+expand('<abuf>')), 'fugitive_leave')
|
||||||
|
autocmd WinLeave * let s:cursor_for_blame = [bufnr(''), line('.')]
|
||||||
|
autocmd WinEnter * if exists('s:cursor_for_blame') | call call('s:BlameCursorSync', s:cursor_for_blame) | endif
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
" Section: :GBrowse
|
" Section: :GBrowse
|
||||||
|
|||||||
Reference in New Issue
Block a user