Fix handling data after exit - channels and neovim
This commit is contained in:
parent
bdca96f663
commit
43dd282702
3 changed files with 39 additions and 5 deletions
|
|
@ -20,12 +20,20 @@ set cpoptions&vim
|
||||||
" }}}
|
" }}}
|
||||||
|
|
||||||
function! s:_OnServerData( channel, data ) abort
|
function! s:_OnServerData( channel, data ) abort
|
||||||
|
if !exists( 's:ch' ) || s:ch isnot a:channel
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
py3 << EOF
|
py3 << EOF
|
||||||
_vimspector_session.OnChannelData( vim.eval( 'a:data' ) )
|
_vimspector_session.OnChannelData( vim.eval( 'a:data' ) )
|
||||||
EOF
|
EOF
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:_OnClose( channel ) abort
|
function! s:_OnClose( channel ) abort
|
||||||
|
if !exists( 's:ch' ) || s:ch isnot a:channel
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
echom 'Channel closed'
|
echom 'Channel closed'
|
||||||
redraw
|
redraw
|
||||||
unlet s:ch
|
unlet s:ch
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,14 @@ set cpoptions&vim
|
||||||
|
|
||||||
|
|
||||||
function! s:_OnEvent( chan_id, data, event ) abort
|
function! s:_OnEvent( chan_id, data, event ) abort
|
||||||
|
if v:exiting isnot# v:null
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists( 's:ch' ) || a:chan_id != s:ch
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
if a:data == ['']
|
if a:data == ['']
|
||||||
echom 'Channel closed'
|
echom 'Channel closed'
|
||||||
redraw
|
redraw
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,14 @@ set cpoptions&vim
|
||||||
|
|
||||||
|
|
||||||
function! s:_OnEvent( chan_id, data, event ) abort
|
function! s:_OnEvent( chan_id, data, event ) abort
|
||||||
|
if v:exiting isnot# v:null
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists( 's:job' ) || a:chan_id != s:job
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
" In neovim, the data argument is a list.
|
" In neovim, the data argument is a list.
|
||||||
if a:event ==# 'stdout'
|
if a:event ==# 'stdout'
|
||||||
py3 _vimspector_session.OnChannelData( '\n'.join( vim.eval( 'a:data' ) ) )
|
py3 _vimspector_session.OnChannelData( '\n'.join( vim.eval( 'a:data' ) ) )
|
||||||
|
|
@ -30,9 +38,7 @@ function! s:_OnEvent( chan_id, data, event ) abort
|
||||||
elseif a:event ==# 'exit'
|
elseif a:event ==# 'exit'
|
||||||
echom 'Channel exit with status ' . a:data
|
echom 'Channel exit with status ' . a:data
|
||||||
redraw
|
redraw
|
||||||
if exists( 's:job' )
|
unlet s:job
|
||||||
unlet s:job
|
|
||||||
endif
|
|
||||||
" This causes terminal spam in neovim due to
|
" This causes terminal spam in neovim due to
|
||||||
" https://github.com/neovim/neovim/issues/11725
|
" https://github.com/neovim/neovim/issues/11725
|
||||||
py3 _vimspector_session.OnServerExit( vim.eval( 'a:data' ) )
|
py3 _vimspector_session.OnServerExit( vim.eval( 'a:data' ) )
|
||||||
|
|
@ -108,10 +114,22 @@ function! vimspector#internal#neojob#Reset() abort
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:_OnCommandEvent( category, id, data, event ) abort
|
function! s:_OnCommandEvent( category, id, data, event ) abort
|
||||||
|
if v:exiting isnot# v:null
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
if a:data == ['']
|
if a:data == ['']
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if !has_key( s:commands, a:category )
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !has_key( s:commands[ a:category ], a:id )
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
if a:event ==# 'stdout'
|
if a:event ==# 'stdout'
|
||||||
let buffer = s:commands[ a:category ][ a:id ].stdout
|
let buffer = s:commands[ a:category ][ a:id ].stdout
|
||||||
elseif a:event ==# 'stderr'
|
elseif a:event ==# 'stderr'
|
||||||
|
|
@ -212,8 +230,8 @@ function! vimspector#internal#neojob#CleanUpCommand( category ) abort
|
||||||
endif
|
endif
|
||||||
|
|
||||||
for id in keys( s:commands[ a:category ] )
|
for id in keys( s:commands[ a:category ] )
|
||||||
call jobstop( id )
|
call jobstop( str2nr( id ) )
|
||||||
call jobwait( id )
|
call jobwait( [ str2nr( id ) ] )
|
||||||
endfor
|
endfor
|
||||||
unlet! s:commands[ a:category ]
|
unlet! s:commands[ a:category ]
|
||||||
endfunction
|
endfunction
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue