Handle buffers which have since been closed in async callbacks.

This commit is contained in:
Andy Stewart
2016-09-13 16:11:42 +01:00
parent efa1ead770
commit 373ad7337b

View File

@@ -80,29 +80,34 @@ endfunction
function! gitgutter#async#handle_diff_job_nvim(job_id, data, event) abort
call gitgutter#debug#log('job_id: '.a:job_id.', event: '.a:event.', buffer: '.self.buffer)
let current_buffer = gitgutter#utility#bufnr()
call gitgutter#utility#set_buffer(self.buffer)
let job_bufnr = self.buffer
if bufexists(job_bufnr)
let current_buffer = gitgutter#utility#bufnr()
call gitgutter#utility#set_buffer(job_bufnr)
if a:event == 'stdout'
" a:data is a list
call s:job_finished(a:job_id)
call gitgutter#handle_diff(gitgutter#utility#stringify(a:data))
elseif a:event == 'exit'
" If the exit event is triggered without a preceding stdout event,
" the diff was empty.
if s:is_job_started(a:job_id)
call gitgutter#handle_diff("")
if a:event == 'stdout'
" a:data is a list
call s:job_finished(a:job_id)
call gitgutter#handle_diff(gitgutter#utility#stringify(a:data))
elseif a:event == 'exit'
" If the exit event is triggered without a preceding stdout event,
" the diff was empty.
if s:is_job_started(a:job_id)
call gitgutter#handle_diff("")
call s:job_finished(a:job_id)
endif
else " a:event is stderr
call gitgutter#hunk#reset()
call s:job_finished(a:job_id)
endif
else " a:event is stderr
call gitgutter#hunk#reset()
call gitgutter#utility#set_buffer(current_buffer)
else
call s:job_finished(a:job_id)
endif
call gitgutter#utility#set_buffer(current_buffer)
endfunction
@@ -117,14 +122,17 @@ function! gitgutter#async#handle_diff_job_vim_close(channel) abort
call gitgutter#debug#log('channel: '.a:channel)
let channel_id = s:channel_id(a:channel)
let job_bufnr = s:job_buffer(channel_id)
let current_buffer = gitgutter#utility#bufnr()
call gitgutter#utility#set_buffer(s:job_buffer(channel_id))
if bufexists(job_bufnr)
let current_buffer = gitgutter#utility#bufnr()
call gitgutter#utility#set_buffer(job_bufnr)
call gitgutter#handle_diff(s:job_output(channel_id))
call gitgutter#handle_diff(s:job_output(channel_id))
call gitgutter#utility#set_buffer(current_buffer)
endif
call s:job_finished(channel_id)
call gitgutter#utility#set_buffer(current_buffer)
endfunction