diff --git a/plugin/gitgutter.vim b/plugin/gitgutter.vim index a9bdca7..bb7d50c 100644 --- a/plugin/gitgutter.vim +++ b/plugin/gitgutter.vim @@ -265,6 +265,35 @@ function! s:next_tick(cmd) call timer_start(1, {-> execute(a:cmd)}) endfunction +function! s:on_buffilepre(bufnr) + if !exists('s:renaming') + let s:renaming = [] + let s:gitgutter_was_enabled = gitgutter#utility#getbufvar(a:bufnr, 'enabled') + endif + + let s:renaming += [a:bufnr] +endfunction + +function! s:on_buffilepost(bufnr) + if len(s:renaming) > 1 + if s:renaming[0] != a:bufnr + throw 'gitgutter rename error' s:renaming[0] a:bufnr + endif + unlet s:renaming[0] + return + endif + + " reset cached values + GitGutterBufferDisable + + if s:gitgutter_was_enabled + GitGutterBufferEnable + endif + + unlet s:renaming + unlet s:gitgutter_was_enabled +endfunction + " Autocommands {{{ augroup gitgutter @@ -309,8 +338,8 @@ augroup gitgutter autocmd ColorScheme * call gitgutter#highlight#define_highlights() - autocmd BufFilePre * let b:gitgutter_was_enabled = gitgutter#utility#getbufvar(expand(''), 'enabled') | GitGutterBufferDisable - autocmd BufFilePost * if b:gitgutter_was_enabled | GitGutterBufferEnable | endif | unlet b:gitgutter_was_enabled + autocmd BufFilePre * call s:on_buffilepre(expand('')) + autocmd BufFilePost * call s:on_buffilepost(expand('')) autocmd QuickFixCmdPre *vimgrep* let b:gitgutter_was_enabled = gitgutter#utility#getbufvar(expand(''), 'enabled') | GitGutterBufferDisable autocmd QuickFixCmdPost *vimgrep* if b:gitgutter_was_enabled | GitGutterBufferEnable | endif | unlet b:gitgutter_was_enabled diff --git a/test/test_gitgutter.vim b/test/test_gitgutter.vim index e0ded71..678af34 100644 --- a/test/test_gitgutter.vim +++ b/test/test_gitgutter.vim @@ -251,6 +251,35 @@ function Test_filename_umlaut() endfunction +function Test_file_cmd() + normal ggo* + + file other.txt + + call s:trigger_gitgutter() + call assert_equal(1, b:gitgutter.enabled) + call assert_equal('', b:gitgutter.path) + call s:assert_signs([], 'other.txt') + + write + + call s:trigger_gitgutter() + call assert_equal(-2, b:gitgutter.path) +endfunction + + +function Test_saveas() + normal ggo* + + saveas other.txt + + call s:trigger_gitgutter() + call assert_equal(1, b:gitgutter.enabled) + call assert_equal(-2, b:gitgutter.path) + call s:assert_signs([], 'other.txt') +endfunction + + " FIXME: this test fails when it is the first (or only) test to be run function Test_follow_symlink() let tmp = 'symlink'