mirror of
https://github.com/airblade/vim-gitgutter.git
synced 2025-11-10 04:23:46 -05:00
Handle buffers which have since been closed in async callbacks.
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user